zoukankan      html  css  js  c++  java
  • C++(二十八) — 构造函数的初始化列表

    1、解决的问题:

      在 B 类中,组合了一个 A 类对象,其中A类设计了构造函数。由于构造函数的调用规则,设计了构造函数就必须调用,但在定义B类时没有机会初始化A,因此采用构造函数的初始化列表来解决。

     2、构造和析构调用顺序

      先执行被组合对象的构造函数,如果组合对象有多个,则按照定义顺序,而不是按照初始化列表顺序。

        析构函数,和构造函数的调用顺序相反。

       举例如下:

    class A
    {
    public:
        A(int a_)
        {
            a = a_;
            cout << "A的构造函数,a: " << a << endl;
        }
        ~A()
        {
            cout << "A的析构函数 " << endl;
        }
    private:
        int a;
    };
    
    class B
    {
    public:
        B(int b1_, int b2_) :a1(1), a2(2)
        {
            b1 = b1_;
            b2 = b2_;
        }
        B(int b1_, int b2_, int m, int n) :a1(m), a2(n)
        {
            b1 = b1_;
            b2 = b2_;
            cout << "B的构造函数" << endl;
        }
        ~B()
        {
            cout << "B的析构函数 " << endl;
        }
    private:
        int b1, b2;
        //A类别构造函数的调用与定义顺序有关,与初始化列表顺序无关。
        A a1;
        A a2;
    };
    
    void display()
    {
        B obj_b1(1, 2, 3, 4);
    }
    
    void main()
    {
        //A a0(10);
        //B obj_b0(1, 2);
        //B obj_b1(1, 2, 3, 4);
        display();
    
        system("pause");
    }

     3、类中定义 const 类型变量

      必须要初始化,此处的变量 c 就是 const 类型的数据。

    B(int b1_, int b2_, int m, int n) :a1(m), a2(n),c(3)
        {
            b1 = b1_;
            b2 = b2_;
            cout << "B的构造函数" << endl;
        }
  • 相关阅读:
    设计模式之备忘录模式
    特殊传参方式
    页面响应效率测试
    composer安装的包git无法提交的解决办法是因为安装的时候生成了.git隐藏文件
    数据结构和算法深入浅出理解
    中缀表达式转换为后缀表达式
    p2p技术
    【自动化测试】WebDriver使用
    pt-query-digest简介使用
    mac编译openJDK8
  • 原文地址:https://www.cnblogs.com/eilearn/p/10194897.html
Copyright © 2011-2022 走看看