我有以下程序:
#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))?
把它放到基类:
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)