C++多态从基类访问派生类字段

kas*_*sky 1 c++ polymorphism

我有以下程序:

#include <iostream>

class Base {};

class Deriv : public Base
{
    public:
        int data;
        Deriv(int data): data(data) {} 
};

int main()
{
    Base *t = new Deriv(2);
    std::cout << t->data << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

当我编译它时,我收到错误:

x.cpp: In function ‘int main()’:
x.cpp:15:21: error: ‘class Base’ has no member named ‘data’
Run Code Online (Sandbox Code Playgroud)

如何访问数据字段(请注意,我不想使用Deriv*t = new Deriv(2))?

tp1*_*tp1 5

把它放到基类:

virtual int get_data() const=0;
Run Code Online (Sandbox Code Playgroud)

然后派生类将需要实现它 - 所有派生类的所有数据都将通过接口:

class Base
{
    virtual int get_data() const = 0;
};

class Deriv: public Base
{
public:
    int data;
    Deriv(int data): data(data) {} 
    virtual int get_data() const
    { return data; }
};
Run Code Online (Sandbox Code Playgroud)