版权声明:根号v587版权所有 https://blog.csdn.net/hcmdghv587/article/details/81913960
#include <iostream>
using namespace std;
class Array
{
public:
int *array;
Array(void);
Array(const Array &rhs);
~Array();
Array & operator=(const Array &rhs);
void create(int length);
int length;
int message;
};
Array::Array(void)
{
length = 0;
array = NULL;
cout << "进入构造器" << endl;
}
Array::Array(const Array &rhs) //副本构造器
{
cout << "进入副本构造器" << endl;
this -> array = NULL;
*this = rhs; //!!!
}
void Array::create(int length)
{
array = new int[length];
this -> length = length;
for (int i = 0; i < length; i++)
{
array[i] = i;
}
}
Array & Array::operator=(const Array &rhs) //重载赋值号
{
if (this != &rhs)
{
if (array != NULL)
{
delete [] array;
}
length = rhs.length;
array = new int[length];
for (int i = 0; i < length; i++)
{
array[i] = rhs.array[i];
}
cout << "拷贝成功!" << endl;
}
else
{
cout << "无需拷贝" << endl;
}
return *this; //!!!
}
Array::~Array()
{
if (array != NULL)
{
delete [] array;
}
cout << "进入析构器" << endl;
}
int main()
{
Array a1, a2;
a1.create(10);
a1.message = 13;
a2 = a1;
cout << "a2.message=" << a2.message << endl;
//message需要手动复制
a2 = a2;
a1.array[5] = 99;
cout << "a1.array[5]=" << a1.array[5] << endl;
cout << "a2.array[5]=" << a2.array[5] << endl;
Array a3 = a1;
cout << "a3.message=" << a3.message << endl;
a1.array[5] = 66;
cout << "a3.array[5]=" << a3.array[5] << endl;
return 0;
}