zoukankan      html  css  js  c++  java
  • [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. ...

          欢迎补充,谢谢!

  • 相关阅读:
    想当老板的人,三点特征很重要(转)
    突破三个自我,你就不光是老板的料
    掌握这3套创业战略 保你赚到百万财富 
    也感山西黑窑洞
    再游府河有感
    朋友的影响力非常大,朋友决定你的财富
    夏日乘凉
    职业生涯的八大“定位法则”
    一生何求
    赠你一方明月
  • 原文地址:https://www.cnblogs.com/Rosanna/p/3340643.html
Copyright © 2011-2022 走看看