• C++ 深拷贝实例-改变原生数组


    深拷贝

    main.cpp

     1 #include <stdio.h>
     2 #include "IntArray.h"
     3 
     4 int main()
     5 {
     6     IntArray a(5);    
     7     
     8     for(int i=0; i<a.length(); i++)
     9     {
    10         a.set(i, i + 1);
    11     }
    12     
    13     for(int i=0; i<a.length(); i++)
    14     {
    15         int value = 0;
    16         
    17         if( a.get(i, value) )
    18         {
    19             printf("a[%d] = %d
    ", i, value);
    20         }
    21     }
    22     
    23     IntArray b = a;
    24     
    25     for(int i=0; i<b.length(); i++)
    26     {
    27         int value = 0;
    28         
    29         if( b.get(i, value) )
    30         {
    31             printf("b[%d] = %d
    ", i, value);
    32         }
    33     }
    34     
    35     a.free();
    36     b.free();
    37     
    38     return 0;
    39 }

    IntArray.cpp

     1 #include "IntArray.h"
     2 
     3 IntArray::IntArray(int len)
     4 {
     5     m_pointer = new int[len];
     6     
     7     for(int i=0; i<len; i++)
     8     {
     9         m_pointer[i] = 0;
    10     }
    11     
    12     m_length = len;
    13 }
    14 
    15 IntArray::IntArray(const IntArray& obj)
    16 {
    17     m_length = obj.m_length;
    18     
    19     m_pointer = new int[obj.m_length];
    20     
    21     for(int i=0; i<obj.m_length; i++)
    22     {
    23         m_pointer[i] = obj.m_pointer[i];
    24     }
    25 }
    26 
    27 int IntArray::length()
    28 {
    29     return m_length;
    30 }
    31 
    32 bool IntArray::get(int index, int& value)
    33 {
    34     bool ret = (0 <= index) && (index < length());
    35     
    36     if( ret )
    37     {
    38         value = m_pointer[index];
    39     }
    40     
    41     return ret;
    42 }
    43 
    44 bool IntArray::set(int index, int value)
    45 {
    46     bool ret = (0 <= index) && (index < length());
    47     
    48     if( ret )
    49     {
    50         m_pointer[index] = value;
    51     }
    52     
    53     return ret;
    54 }
    55 
    56 void IntArray::free()
    57 {
    58     delete[]m_pointer;
    59 }

    IntArray.h

     1 #ifndef _INTARRAY_H_
     2 #define _INTARRAY_H_
     3 
     4 class IntArray
     5 {
     6 private:
     7     int m_length;
     8     int* m_pointer;
     9 public:
    10     IntArray(int len);
    11     IntArray(const IntArray& obj);
    12     int length();
    13     bool get(int index, int& value);
    14     bool set(int index ,int value);
    15     void free();
    16 };
    17 
    18 #endif
  • 相关阅读:
    windows10 中 svn 代码统计工具 StatSVN 使用详解
    Windows 10 安装 JDK14 Java 环境,没有 jre 包
    GET和POST两种基本请求方法的区别
    图解HTTP学习笔记(一)WEB基础
    【LinuxShell】cp 用法详解
    博客陆续迁移中...
    显示git忽略文件
    字符串遍历
    SDWebImage源码分析(二)
    其他
  • 原文地址:https://www.cnblogs.com/lemaden/p/10107584.html
Copyright © 2020-2023  润新知