美文网首页c++小黄鸭课堂
C++小黄鸭课堂(2)默认构造函数

C++小黄鸭课堂(2)默认构造函数

作者: 春天的尐熊 | 来源:发表于2021-10-31 18:48 被阅读0次

    先来看一下下面这段代码,思考一下会发生什么?

    class A {  
    };
    A a;
    

    有经验的小黄鸭应该会知道,这里面调用了A类的默认构造函数。

    下面讲解一下:
    这段代码定义了一个空的类A,并进行实例化出了类型A的对象a。

    小黄鸭小A:那么什么是实例化呢?
    实例化的过程是分配一块内存空间,然后对其内存空间的数据进行初始化。
    这是两个步骤:
    1、分配内存
    2、初始化内存数据
    然后在初始化的时候就是执行了A类的构造函数,也就是说上面的代码会分配一块内存给a,并执行了A类的构造函数。

    小黄鸭小A:你骗人,这里并没有看到你说的构造函数呀
    其实编译器会自动给我们生成一个默认的构造函数,但是~。
    运行一下下面这段代码

    class A {
        public:
        A(int i) : a(i) {
        }
        private:
        int a;
    };
    A a;
    

    小黄鸭小B:呱呱,这代码根本编译不通过呀

    error: no matching constructor for initialization of 'A'

    小黄鸭小A:这看上去是因为没有构造函数
    对的,是因为上面这段代码给类A定义了一个构造函数A(int i),所以编译器认为不需要再为你自动生成一个默认的构造函数了。
    然后我们定义的A(int i)是一个有参数的构造函数,实例化a时需要的是一个无参数的构造函数,此时编译阶段发现没有无参数的构造函数,于是编译器报错了。
    众鸭子:呱呱呱

    相关文章

      网友评论

        本文标题:C++小黄鸭课堂(2)默认构造函数

        本文链接:https://www.haomeiwen.com/subject/ucaoaltx.html