首页 > 技术文章 > [C++]默认构造函数

Rosanna 2013-09-26 13:38 原文

      默认构造函数(default constructor)就是在没有显示提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。若个定义某个类的变量时没有提供初始化式就会使用默认构造函数。

      如果用户定义的类中没有显式的定义任何构造函数,编译器就会自动为该类型生成默认构造函数,称为合成的构造函数。

      多数情况下,编译器为类生成一个公有的默认构造函数,例如:

      1.我们知道,若某类/函数中有成员是类对象(a),那么它会自动调用A的默认构造函数;

1 class A
2 {
3 };
4 
5 class B
6 {
7 public:
8     A a;
9 };

       2.类中存在虚函数,或者基类是虚基类,那么编译器会自动调用构造函数来初始化虚函数表或者虚基类表。

      3. ...

      但是以下情况例外:

      1.一个类显式的声明了任何构造函数或者是非公有的默认构造函数,编译器不生成公有的默认构造函数。

 1 class A
 2 {
 3 private:
 4     int num;
 5 public:
 6     A(int n)
 7     {
 8         num=n;
 9     }
10 };
11 
12 
13 int main()
14 {
15     A a;//error C2512: “A”: 没有合适的默认构造函数可用
16     return 0;
17 }

      **2.派生类默认调用基类构造函数来完成基类初始化,如果基类没有提供这个默认构造函数,那么编译器不会为派生类生成默认的构造函数。

 1 class A
 2 {
 3 private:
 4     int A_num;
 5 public:
 6     //A(){};     //若是没有,则下面报错;
 7     A(int n)
 8     {
 9         A_num=n;
10     }
11 };
12 
13 class B:public A
14 {
15 private:
16     int B_num;
17 public:
18     B(int n)
19     {             //error C2512: “A”: 没有合适的默认构造函数可用
20         B_num=n;
21     }
22 };

      3. ...

 

      欢迎补充,谢谢!

推荐阅读