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