拷贝构造函数分为深拷贝和浅拷贝,浅拷贝是将对象的成员依次进行赋值操作,而深拷贝则是将对象中若是存在指针成员,将指针成员所指向的成员依次进行赋值操作。
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()
新闻热点
疑难解答
图片精选