• [C++] 构造函数初始化列表


    C++ 类中构造函数中成员变量的初始化方式有两种:

    1、构造函数体内(常用方式)

    class Student {
    private:
        int a;
        int b;
    public:
        // 错误,只是将a/b赋给形参,没有赋值给成员变量
        explicit Student(int a, int b) {
            a = a;
            b = b;
        }
        // 正确
        explicit Student(int a, int b) {
            this->a = a;
            this->b = b;
        }
        // 正确
        explicit Student(int a1, int b1) {
            a = a1;
            b = b1;
        }
    };

    2、构造函数初始化列表

    class Student {
    private:
        int a;
        int b;
    public:
        // 按照成员变量定义的顺序赋值,而不是冒号后的顺序
        // 下面两种方式意义相同
        explicit Student(int a, int b) : a(a), b(b) {
    //  explicit Student(int a, int b) : b(b), a(a) {
            cout << a << ' ' << b << endl;
        }
    };

    这两种方式,对于基本类型成员没有区别,但是对复杂类型成员(比如类,结构体等),第二种效率更高,第一种会调用一次默认的构造函数,在类构造函数里又会调用一次成员的构造函数再赋值;第二种仅在初始化列表里调用一次成员的构造函数并赋值。

    下面情况必须使用初始化列表:

    1、在派生类中构造函数中初始化提供父类的初始化

    2、如果成员是常量或引用,成员无法使用赋值的方式,只能在初始化列表中初始化

    3、成员变量是类类型

  • 相关阅读:
    CentOS7突然出现无法连接网络的情况--VM下
    设置Linux系统的LANG变量
    习题
    Linux目录路径知识
    Linux目录详细介绍
    regexp正则
    https://github.com/rwson/awesome-javascript-cn
    JavaScript资源大全中文版(Awesome最新版)
    关于 Chrome DevTools 的 25 个实用技巧
    从前端菜鸟到大神,看这一篇就够了
  • 原文地址:https://www.cnblogs.com/lialong1st/p/12060592.html
Copyright © 2020-2023  润新知