c++小黄鸭课堂

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

2021-10-31  本文已影响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时需要的是一个无参数的构造函数,此时编译阶段发现没有无参数的构造函数,于是编译器报错了。
众鸭子:呱呱呱

上一篇下一篇

猜你喜欢

热点阅读