有程序:
#include <iostream>
using namespace std;
class ClassA
{
public:
ClassA(int i = 0) {x = i;}
ClassA(const ClassA& t)
{
x = t.x;
cout << "调用拷贝构造函数" << endl;
}
ClassA& operator = (const ClassA& t)
{
cout << "调用赋值函数" << endl;
if(this != &t) x = t.x;
return *this;
}
private:
int x;
};
int main()
{
ClassA ca(1);
ClassA cb;
cb = ca; //(1)
ClassA cc = ca; //(2)
return 0;
}
运行结果:
调用赋值函数
调用拷贝构造函数
语句(1)处使用赋值运算,但是(2)使用的是初始化而非赋值,C++规定创建对象时必须进行初始化,而拷贝构造函数和构造函数用以进行对象的初始化,这里使用一个对象给另一个对象进行初始化,调用拷贝构造函数。