C++深拷贝浅拷贝

来源:互联网 发布:算法还是编码 编辑:程序博客网 时间:2024/06/05 05:37

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

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_iCount5m_pArr的值:0x9c0e20m_pArr的值:0x9c0e400123401234~Array()~Array()



0 0
原创粉丝点击