在c ++中的继承.为什么这是错的?

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)

Ste*_*sop 8

正确的形式是:

Adult(string n, string id) : Human(n), passportId(id) {}
Run Code Online (Sandbox Code Playgroud)

初始化列表用于初始化基类和您自己的成员.你没有初始化你的基地成员,他们自己这样做.