hof*_*fmn 0 c++ syntax inheritance constructor initialization
class Human
{
protected:
string name;
public:
Human () : name ("Jim") {}
Human (string n) : name (n) {}
};
class Adult : public Human
{
private:
string passportId;
public:
Adult ()// : name ("Eric"), passportId ("N0123") - *THIS IS ERROR*
{
// this is ok
name = "Eric";
passportId = "N0934956";
}
Adult (string n, string id)// : name(n), passportId(id) *THIS IS ERROR*
{
// this is ok
name = n;
passportId = id;
}
};
Run Code Online (Sandbox Code Playgroud)
所以我们有基类Human和派生类Adult.在代码中(构造函数的实现),你可以看到注释行.
为什么在这种情况下使用这种初始化是错误的?
Adult (string n, string id) : name(n), passportId(id) {} // *THIS IS ERROR*
Run Code Online (Sandbox Code Playgroud)
正确的形式是:
Adult(string n, string id) : Human(n), passportId(id) {}
Run Code Online (Sandbox Code Playgroud)
初始化列表用于初始化基类和您自己的成员.你没有初始化你的基地成员,他们自己这样做.