C++ 无法从父级访问子级属性

ana*_*nik 2 c++ inheritance

谁能解释为什么Driver init()方法无法打印name子级中重写的属性?

#include <iostream>
#include <string>

class Driver {
public:
    std::string name = "Unknown";

    void init() {
        std::cout << name << std::endl;
    }
};

// need public here to inherit init()
class SpecificDriver : public Driver {
public:
    std::string name = "Specific";

};

int main() {
    Driver d;
    SpecificDriver sd;

    // this gives Unknown Unknown =/
    d.init();
    sd.init();
}
Run Code Online (Sandbox Code Playgroud)

这给出:

Unknown
Unknown
Run Code Online (Sandbox Code Playgroud)

并且应该是:

Unknown
Specific
Run Code Online (Sandbox Code Playgroud)

Live Demo

Ale*_*cki 5

你所做的事情并不完全是你认为的那样。您在 driver 中声明变量“name”,并在 SpecificDriver 中声明变量“name”。当您调用init()基类驱动程序中的定义时,该驱动程序只能访问其自己的name值为“未知”的字段。

相反,您应该使用构造函数初始化“name”变量。

像这样:

class Driver {
public:
    std::string name;

    Driver():name("Unknown"){} //default
    Driver(std::string value):name(value){}

    void init() {
        std::cout << name << std::endl;
    }
};

// need public here to inherit init()
class SpecificDriver : public Driver {
public:
    SpecificDriver():Driver("Specific"){}
};

int main() {
    Driver d;
    SpecificDriver sd;

    d.init();
    sd.init();
}
Run Code Online (Sandbox Code Playgroud)

编辑:现场演示http://coliru.stacked-crooked.com/a/c453758867454348