class A
{
public:
A()
{
printf("0");
}
A(int a)
{
printf("1");
}
A& operator=(const A& a)
{
printf("2");
return*this;
}
};
int test1()
{
A al;
al = 10;
return 0;
}
上面的代码大家觉得会输出什么?
正确答案是:012
这里只需要解释一下,到底为什么有中间这个1,我们看主函数的第一行A类实例化了一个对象,这个对象现在调的是默认的构造函数,第二行是给这个对象赋值,但是因为此时的对象是无参构造出来的,不能直接赋值,所以就会去先调带参数的构造函数,然后才会使用=重载进行赋值,不这样的话就无法赋值,这个过程也是编译器帮我们的。