zoukankan      html  css  js  c++  java
  • C++ 成员初始化列表

    1.什么是成员初始化列表

    #include<iostream>
    #include<string>
    using namespace std;
    class Weapon
    {
    private:
        string name;
        const string type;
        const string model;
    public:
        Weapon(string& name, string& type, string& model) :name(name), type(type), model(model)
        {
            name = "Cloud";
        }
        string getProfile()
        {
            return "name: " + name + "
    type: " + type + "
    model: " + model;
        }
    };
    
    int main(void)
    {

        string name = "Comet";
        string type = "carbine";
        string model = "rifle";
        Weapon weapon(name, type, model);

        cout << weapon.getProfile() << endl;
    
        cin.get();
        return 0;
    }

    上面代码中标红的部分,就是成员初始化列表

     

    注意观察,构造函数里的 name = "Cloud"; 被初始化列表的值覆盖了

    2.为什么需要成员初始化列表

    type和model都是常量,可以初始化但不能赋值,如果试图在构造函数的函数体中进行如  type = "xxx";之类的 赋值,将会报错。 从概念上讲,在进入构造函数的函数体之前,对象已经被创建,所以必须在对象创建之前完成初始化,所以C++发明了初始化列表,这种形式的赋值被认为就是初始化。

    请注意:1.这种格式只能用于构造函数;

        2.必须使用这种方式来初始化非静态const数据成员(静态const数据不属于对象所以也就不能在构造函数里初始化);

        3.必须用这种格式来初始化引用数据成员(这是因为引用与const数据类似,只能在创建时被初始化)

  • 相关阅读:
    Spring 09 : AOP实例
    Spring08 AOP概念
    Spring 07 : 动态代理
    Spring06 Spring+Junit
    Spring05 : 基于注解的IOC
    Spring03 : 依赖注入
    jupyter修改python核(使用不同的python虚拟环境)
    线性代数的本质——引入几何视角
    图像的去雾与加雾
    从MATLAB看一个IDE应该具有的素质
  • 原文地址:https://www.cnblogs.com/heben/p/9440032.html
Copyright © 2011-2022 走看看