一个c语言构造函数调用的问题(有趣)

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作为了参数传入了。

声明这对象的时候没初始化参数,所以就调用了没参数的那个构造函数构造完这个对象了。
第二行的赋值在等号两边类型不匹配,所以编译器查找有没以右边的数据类型为参数的构造函数,找到后当然是构造临时对象再赋值啦。
原文地址:https://www.cnblogs.com/dayouluo/p/115957.html