class MyClass001
{
private:
public:
MyClass001()
{
printf("MyClass001");
}
MyClass001(int i)
{
printf("MyClass001-i");
}
};
resolve:
MyClass001 k1;//显示MyClass001
k1=1;//显示MyClass001-i
其实第二句相当于是在调用有int i的那个构造函数,实际上是在给那个构造函数赋值了i。
从而调用了MyClass001(int i)。
如果写一个class test;
class test
{
public int i;
};在MyClass001之前。
然后改MyClass001(int i)
{
printf("MyClass001-i");
}
为MyClass001(test * tt)
{
printf("MyClass001-test");
}
则语句
MyClass001 k1;
k1 = new test;
正确,明显是把new test作为了参数传入了。
声明这对象的时候没初始化参数,所以就调用了没参数的那个构造函数构造完这个对象了。
第二行的赋值在等号两边类型不匹配,所以编译器查找有没以右边的数据类型为参数的构造函数,找到后当然是构造临时对象再赋值啦。