在构造函数初始化列表中启动列表

时间:2010-06-12 08:50:27

标签: c++ list stl

我刚从C转到C ++,现在使用列表。 我有一个名为“message”的类,我需要一个名为“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;
    }

}

2 个答案:

答案 0 :(得分:2)

初始化列表用于初始化任何基类和成员变量。构造函数的主体意味着在对象被初始化之前运行您需要的任何其他代码。

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

答案 1 :(得分:0)

您无需在初始化列表中执行所有操作。没有看到一些代码就很难分辨,但听起来添加消息最好在构造函数的主体中完成。