在构造函数的初始化列表中初始化列表
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 - 将代码作为问题的一部分发布。以上是关于在构造函数的初始化列表中初始化列表的主要内容,如果未能解决你的问题,请参考以下文章