zoukankan      html  css  js  c++  java
  • 一个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作为了参数传入了。

    声明这对象的时候没初始化参数,所以就调用了没参数的那个构造函数构造完这个对象了。
    第二行的赋值在等号两边类型不匹配,所以编译器查找有没以右边的数据类型为参数的构造函数,找到后当然是构造临时对象再赋值啦。
  • 相关阅读:
    WEBUS2.0 In Action
    WEBUS2.0 In Action
    WEBUS2.0 In Action
    WEBUS2.0 In Action
    在Linux查看版本命令
    Increasing heap size while building the android source code on Ubuntu 15.10
    在Linux中增加swap空间
    Patch
    使用Vim比较两个文件的内容
    @override 重写 与重载
  • 原文地址:https://www.cnblogs.com/dayouluo/p/115957.html
Copyright © 2011-2022 走看看