拷貝構造函數分為深拷貝和淺拷貝,淺拷貝是將對象的成員依次進行賦值操作,而深拷貝則是將對象中若是存在指針成員,將指針成員所指向的成員依次進行賦值操作。
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()
新聞熱點
疑難解答
圖片精選