【发布时间】:2016-07-31 05:11:58
【问题描述】:
我有一个派生自另一个类的类,我使用基类指针数组来保存派生类的实例,但由于该数组属于基类,我无法使用指针访问属于派生类的成员表示法,我是否可以通过简单的命令访问这些成员,还是应该重写我的基类来定义成员并只在派生类中使用它?
例子:
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;
}
【问题讨论】:
-
据我所知,您不能从基类的指针访问派生类的成员。仅仅是因为基类无论如何都无法识别它。但是,您可以从派生类的指针访问基类的成员,因为层次结构说基类的公共成员现在也是派生类的成员。
-
但是数据在技术上是存在的吧?我可以使用内存偏移量吗?
-
这就是虚拟方法的用途。如果您尚未了解 C++ 类中的虚拟方法,那么现在是学习的绝佳机会。
标签: c++ class pointers polymorphism