// xigou_example.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class IntArray
{
public:
IntArray(int sz); //构造函数,有参
IntArray(); //构造函数,无参
IntArray(IntArray &x); //深度拷贝函数
void displayArraySize();//显示数组信息
~IntArray(); //析构函数
private:
int m_size;
int *m_ptr;
};
int _tmain(int argc, _TCHAR* argv[])
{
IntArray a(20), b;
a.displayArraySize();
b.displayArraySize();
//深度拷贝和浅度拷贝
IntArray x(25);
IntArray y(x); //用已存在对象x初始化新建对象y
//浅拷贝时x,y的m_ptr相同,指向同一空间
//有指针时需要进行深拷贝。
x.displayArraySize(); //结果25
y.displayArraySize(); //结果25,一个空间释放2次,会导致错误
getchar();
return 0;
}
IntArray::IntArray(int sz) //构造函数,有参
{
m_size = sz;
m_ptr =new int[sz];
}
IntArray::IntArray() //构造函数,无参
{
m_size = 10;
m_ptr = new int[10];
}
void IntArray::displayArraySize()//显示数组信息
{
cout << "The size of this array is:"
<< m_size << endl;
}
IntArray::~IntArray() //析构函数
{
cout << "调用析构函数" << m_size << endl;
delete[] m_ptr; //收回额外空间
}
IntArray::IntArray(IntArray &x) //深拷贝函数
{
m_size = x.m_size; //长度一致
m_ptr = new int[m_size]; //定义新对象时,申请一个新的空间
}
运行结果: