我有一个派生自另一个类的类,我使用一个基类指针数组来保存派生类的实例,但是由于该数组属于基类,所以我无法使用指针表示法访问属于该派生类的成员,是是否可以通过简单的命令访问这些成员,还是应该重写基类以定义成员并仅在派生类中使用它?
例子:
class A {
public:
int foo;
};
class B : public A {
public:
char bar;
};
class C : public A {
int tea;
};
int main() {
A * arr[5];
arr[0] = new B;
char test = arr[0]->bar; //visual studio highlights this with an error "class A has no member bar"
return 0;
}
最佳答案
这是设计使然:您没有告诉编译器指针所指向的对象是派生类型的。
如果您100%确定指针指向static_cast<B*>(arr[0])
,则可以在执行B
时执行此操作,但是应将转换解决方案用作最后的解决方案。相反,您应该在基类中派生一个成员函数,并在派生类中提供一个实现:
class A {
public:
int foo;
virtual char get_bar() = 0;
};
class B : public A {
char bar;
public:
char get_bar() {
return bar;
}
};
关于c++ - 从基类的指针访问派生类的成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36525002/