这是一个班级。
class Checker
{
public:
Checker();
~Checker();
private:
MapFileParser m_MapParser; //MapFileParser::MapFileParser(const char* path)
};
在声明另一个类时,是否有任何方法可以初始化类成员对象? MapFileParser
类只有一个具有MapFileParser::MapFileParser(const char* path)
签名的构造函数。但是当它在班级成员时我无法初始化。所以我总是在MapFileParser
类的构造函数中初始化Checker
成员。
答案 0 :(得分:2)
从C ++ 11开始,您可以使用default member initializer,例如
class Checker
{
...
MapFileParser m_MapParser{"something"};
// or
MapFileParser m_MapParser = MapFileParser("something");
};
在C ++ 11之前,您必须使用member initializer list,
成员初始化列表是可以指定这些对象的非默认初始化的地方。
e.g。
class Checker
{
public:
Checker() : m_MapParser("something") {}
...
private:
MapFileParser m_MapParser;
};
答案 1 :(得分:1)
您可以使用:
用于初始化成员变量的类内成员初始化语法(仅在C ++ 11或更高版本中可能)。
"scripts": {
"ng": "ng",
"start-prod": "ng serve --environment=prod --deploy / --proxy-config proxy.conf.json",
"start-uat": "ng serve --environment=uat --deploy / --proxy-config proxy.conf.json",
"start-dev": "ng serve --environment=dev --deploy / --proxy-config proxy.conf.json",
"build:aot": "ngc -p tsconfig-aot.json && rollup -c rollup-config.js",
"build-prod": "ng build --environment=prod --aot false output-hashing none --deploy /",
"build-uat": "ng build --environment=uat --aot false output-hashing none --deploy /",
"build-dev": "ng build --environment=dev --aot false output-hashing none --deploy /",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
用于初始化成员变量的初始化列表语法。
MapFileParser m_MapParser = MapFileParser("some sensible file name");
只有拥有多个构造函数时,类内成员初始化语法才有用。如果您有一个构造函数,则可以使用初始化列表语法而不会丢失功能。
如果您有多个构造函数并且能够使用C ++ 11或更高版本的编译器,则可以使用委派构造函数来减少代码重复。
在评论中,你说:
我将Checker()的参数void修复为const char *,Checker(const char * Path)将路径传递给MapFileParser。
在这种情况下,唯一的解决方案是使用成员初始化列表来初始化成员。
Checker::Checker() : m_MapParser("some sensible file name") { ... }