这是一个类。
class Checker
{
public:
Checker();
~Checker();
private:
MapFileParser m_MapParser; //MapFileParser::MapFileParser(const char* path)
};
在声明另一个类时,是否有任何方法可以启动类成员对象?MapFileParser
类只有一个conducter,其签名如MapFileParser::MapFileParser(const char* path)
。但是我无法在课堂成员中初始化它。因此,我总是在Checker
班级构造中初始化MapFileParser
成员。
来自C 11您可以使用默认成员初始化器,例如
class Checker
{
...
MapFileParser m_MapParser{"something"};
// or
MapFileParser m_MapParser = MapFileParser("something");
};
在C 11之前,您必须使用成员初始器列表,
成员初始化列表是可以指定这些对象的非默认初始化的地方。
,例如
class Checker
{
public:
Checker() : m_MapParser("something") {}
...
private:
MapFileParser m_MapParser;
};
您可以使用:
-
阶层成员初始化语法初始化成员变量(仅在C 11或更高版本中可能)。
MapFileParser m_MapParser = MapFileParser("some sensible file name");
-
初始化列表语法以初始化成员变量。
Checker::Checker() : m_MapParser("some sensible file name") { ... }
只有在您有多个构造函数的情况下,课堂成员初始化语法才有用。如果您有一个构造函数,则可以使用初始化列表语法而不会损失功能。
如果您有多个构造函数,并且可以使用C 11或更高版本的编译器,则可以使用委派构造函数来减少代码重复。
在评论中,您说:
i将把Checker()的参数void固定到const char *,Checker(const char * path)将通过MapFileParser的路径。
在这种情况下,唯一的解决方案是使用成员初始化列表来初始化成员。
Checker::Checker(char const* path) : m_MapParser(path) { ... }