C++深拷贝浅拷贝

拷贝构造函数分为深拷贝和浅拷贝,浅拷贝是将对象的成员依次进行赋值操作,而深拷贝则是将对象中若是存在指针成员,将指针成员所指向的成员依次进行赋值操作。

Array.h

class Array
{
public:
    Array(int count);
    Array(const Array &arr);
    ~Array();
    void setCount(int count);
    int getCount();
    void printAddr();
    void printArr();
private:
    int m_iCount;
    int *m_pArr;
};
Array.cpp

#include<iostream>
#include"Array.h"
using namespace std;

Array::Array(int count)
{
    m_iCount=count;
    m_pArr=new int[m_iCount];
    for(int i=0;i<m_iCount;i++)
    {
        m_pArr[i]=i;
    }
    cout<<"Array()"<<endl;
}

Array::Array(const Array &arr)
{
    m_iCount=arr.m_iCount;
    m_pArr=new int[m_iCount];
    for(int i=0;i<m_iCount;i++)
    {
        m_pArr[i]=arr.m_pArr[i];
    }

    cout<<"Array(const Array &arr)"<<endl;
}

Array::~Array()
{
    delete []m_pArr;
    m_pArr=NULL;
    cout<<"~Array()"<<endl;
}

void Array::setCount(int count)
{
        m_iCount=count;
}

int Array::getCount()
{
        return m_iCount;
}

void Array::printAddr()
{
    cout<<"m_pArr的值:"<<m_pArr<<endl;
}

void Array::printArr()
{
    for(int i=0;i<m_iCount;i++)
    {
        cout<<m_pArr[i]<<endl;
    }
}
demo.cpp

#include<iostream>
#include"Array.cpp"
using namespace std;

/**
  实例安排:
  1.定义一个Arry类,数据成员为m_iCount,成员函数包括数据封装函数,
  构造函数,拷贝构造函数和析构函数,通过此实例体会浅拷贝原理。
  2.增加数据成员m_pArr,并增加m_pArr地址查看函数,同时改造构造函数,
  拷贝构造函数和析构函数,体会深拷贝的原理和必要性。
*/

int main()
{
    Array arr1(5);
    //arr1.setCount(5);

    Array arr2(arr1);

    cout<<"arr2.m_iCount"<<arr2.getCount()<<endl;
    arr1.printAddr();
    arr2.printAddr();
    arr1.printArr();
    arr2.printArr();

    return 0;
}

Array()
Array(const Array &arr)
arr2.m_iCount5
m_pArr的值:0x9c0e20
m_pArr的值:0x9c0e40
0
1
2
3
4
0
1
2
3
4
~Array()
~Array()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值