在构造函数的初始化列表中初始化列表

Posted

技术标签:

【中文标题】在构造函数的初始化列表中初始化列表【英文标题】:initiating lists in the constructor's initialization list 【发布时间】:2010-06-12 08:50:27 【问题描述】:

我刚从 C 迁移到 C++,现在使用列表。 我有一个名为“消息”的类,我需要一个名为“line”的类, 它的属性中应该有一个消息列表。据我所知,对象的属性应该在构造函数的初始化列表中进行初始化,并且除了其余属性(一些字符串和双精度)之外,我还有初始化消息列表的“冲动”。这种“冲动”合理吗?列表需要初始化吗?

这是我的代码。 目的是创建一个空的行列表,我说的构造函数就是line.cpp中的那个

//-------------------
//Code for line.h:
//-------------------

#ifndef LINE_H_
#define LINE_H_

#include "message.h"
#include <string>
#include <list>
using namespace std;

namespace test

    using std::string;

    class Line
    
        public:
            // constractor with parameters
            Line(const string& phoneStr, double callRate, double messageRate);

            //function to get phone string
            string getPhoneStr() const;

            double getCallRate() const;

            double getMessageRate() const;

            double getLastBill() const;

            void addMessage(const string& phoneStr);


        private:
            string mPhoneStr;
            list<Message> mMessages;
            double mMessageRate;
            double mLastBill;
    ;


#endif /* LINE_H_ */


//-------------------
//Code for line.cpp:
//-------------------

#include "line.h"

namespace test

    Line::Line(const string& phoneStr, double callRate, double messageRate)
        : mPhoneStr(phoneStr), mCallRate(callRate), mMessageRate(messageRate),
        mLastBill(0) 

    //getters:

    string Line::getPhoneStr() const
    
        return mPhoneStr;
    

    double Line::getCallRate() const
    
        return mCallRate;
    

    double Line::getMessageRate() const
    
        return mMessageRate;
    

    double Line::getLastBill() const
    
        return mLastBill;
    





//-------------------
//Code for message.h:
//-------------------

#ifndef MESSAGE_H_
#define MESSAGE_H_

#include <string>

namespace test

    using std::string;

    class Message
    
        public:
            // constractor with parameters
            Message(const string& phoneStr);

            //function to get phone string
            string getPhoneStr() const;

            //function to set new phone string
            void setPhoneStr(const string& phoneStr);


        private:
            string mPhoneStr;
    ;

#endif /* MESSAGE_H_ */

//-----------------------------------------------------------------------

//---------------------
//code for message.cpp:
//---------------------


#include "message.h"

namespace test


    Message::Message(const string& phoneStr) : mPhoneStr(phoneStr) 

    string Message::getPhoneStr() const
    
        return mPhoneStr;
    

    void Message::setPhoneStr(const string& phoneStr)
    
        mPhoneStr = phoneStr;
    


【问题讨论】:

【参考方案1】:

初始化列表用于初始化任何基类和成员变量。构造函数的主体旨在运行您需要的任何其他代码,然后才能将对象视为已初始化。

我很难理解您的情况,但希望以上内容有所帮助。

【讨论】:

【参考方案2】:

您不必执行初始化列表中的所有操作。不看一些代码很难说,但听起来在构造函数的主体中添加消息会更好。

【讨论】:

请原谅我也在这里发布它,但我仍然不知道这个网站是如何运作的。一旦我得到一些答案,我会从主要信息中删除它:这是我的班级:pastebin.com/X9Y9j0bH。声明时,一行应该有一个空的消息列表 @bks 不要使用 pastebin - 将代码作为问题的一部分发布。

以上是关于在构造函数的初始化列表中初始化列表的主要内容,如果未能解决你的问题,请参考以下文章

C++:初始化成员变量(无参构造|有参构造|初始化列表)

C++初始化列表构造函数VS普通构造函数

C++ 构造函数初始化列表

C++构造函数的初始化列表

在构造函数初始化列表中初始化成员数组(C++11之前)

为什么 没有缺省构造函数的类类型成员 必需要在初始化列表 里初始化 ?