• [C++]默认构造函数


          默认构造函数(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. ...

          欢迎补充,谢谢!

  • 相关阅读:
    vim
    Linux 软链接和硬链接
    常用命令
    linux 二级目录结构
    关于bash shell的理解
    虚拟机网络模式
    安装虚拟机
    date 命令
    使用3种协议搭建yum仓库
    ubuntu update时发生错误
  • 原文地址:https://www.cnblogs.com/Rosanna/p/3340643.html
Copyright © 2020-2023  润新知