#include<iostream>
using namespace std;
class A
{
public:
A()
{
printf("1 ");
}
A(const A&)
{
printf("2 ");
}
};
int main()
{
A a;
A b=a;
cout<<endl;
return 0;
}
并且不调用重载的“=”,证明如下,在A的public中添加如下代码
A& operator =(A& a)
{
printf("3 ");
return *this;
}
运行结果不变。
但若再将主函数修改如下:
A a;
A b;//主要是这行和下面一行
b=a;//
cout<<endl;
则结果:
说明调用了两次构造函数,b=a;这句调用了重载的“=”,而没有调用拷贝构造函数。
下面再试另外一个例子:
#include<iostream>
using namespace std;
class A
{
public:
A()
{
printf("0");
}
A(int)
{
printf("1");
}
A& operator=(const A& a)
{
printf("2");
}
};
int main()
{
A a=10;
return 0;
}
输出结果如下:
分析:
但凡在初始化一个语句里,包括A a(b);A a=b;A a=10;这些语句,必然调用一个构造函数,且该构造函数的参数类型与“=”后面那个一致!
若将上例中A a=10;改为 A a; a=10;则结果为:
说明a=10;这句首先调用A(int)构造函数,再调用重载的“=”。