码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 成员初始化列表

时间:2018-08-07 23:50:42      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:nbsp   style   pac   stream   创建   inf   EAP   model   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 + "\ntype: " + type + "\nmodel: " + model;
    }
};

int main(void)
{
    Weapon weapon("Comet", "carbine", "rifle");
    cout << weapon.getProfile() << endl;

    cin.get();
    return 0;
}

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

 技术分享图片

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

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

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

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

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

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

C++ 成员初始化列表

标签:nbsp   style   pac   stream   创建   inf   EAP   model   c++   

原文地址:https://www.cnblogs.com/heben/p/9440032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!