• 构造函数的初始化表


    1. 如果类存在继承关系,那么派生类中必须在初始化列表中调用基类的构造函数;

    class A
    {…
        A(int x);        // A的构造函数
    };    
    class B : public A
    {…
        B(int x, int y);    // B的构造函数
    };
    
    B::B(int x, int y): A(x)   // 在初始化表里调用A的构造函数
    {
          …
    }    

    2. const数据成员必须在初始化列表中进行初始化。因为const常量是属于对象的常量,而不是整个类的常量,对于每个对象,常量的值是不同的,在初始化列表中进行初始化。

    3. 类的数据成员初始化,分为对象成员,和一般数据成员。可以在初始化列表中进行,也可以在构造函数内部进行。对于对象成员,采用初始化列表会更方便,因为初始化列表中初始化对象成员,直接调用的是拷贝构造函数。如果在函数体内初始化对象成员,是需要先调用对象成员类的构造函数,再调用赋值运算符函数进行赋值。

    class A
    {…
        A(void);                // 无参数构造函数
        A(const A &other);        // 拷贝构造函数
        A & operate =( const A &other);    // 赋值函数
    };
    
    class B
    {
    public:
        B(const A &a);    // B的构造函数
    private:    
        A  m_a;            // 成员对象
    };
    
    B构造函数方法一:
    B::B(const A &a): m_a(a)    //调用的是拷贝构造函数初始化m_a        
    { 
       … 
    }    
    方法二:
    B::B(const A &a)
    {
    m_a = a;//先调用A的构造函数,创建对象m_a,再调用A的赋值函数进行赋值
    …
    }
  • 相关阅读:
    JavaScript学习(五)
    浏览器输入地址到返回页面
    session cookie
    springboot 运行jar包
    mysql:The user specified as a definer ('root'@'%') does not exist
    easyUI
    json
    json fastjson
    springboot:because it is a JDK dynamic proxy that implements:
    git 提示错误:(non-fast-forward)
  • 原文地址:https://www.cnblogs.com/beaglebone/p/5729563.html
Copyright © 2020-2023  润新知