我有一段时间没有使用派生类和多态性了,我不知道如何访问派生类数据项。
// Quick example
class Base {
string data1; // data1 = "FOO"
};
class ChildA : public Base {
string data2;
};
int main() {
Base **list;
list = new Base*[1];
base[0] = new ChildA(// data2 = "BAR");
std::cout << base[0]->data1; // FOO
std::cout << base[0]->data2; // Error; no member named "data2" in Base
是否可以从基类数组中检索派生数据?
最佳答案
当您通过指向基类的指针查看派生类的实例时,您只能看到基类的成员,因为通常您不知道您正在查看的是什么子类型实例。多态性和虚函数的要点在于,在许多情况下,您可以在不知道其实际类型的情况下使用子类型实例。例如,如果你想打印关于一个实例的信息,并且你希望在打印 ChildA
时包含 data2
,你可以创建一个虚拟的 toString( )
在 Base
中运行,并在 ChildA
中覆盖它以包含 data2
。然后,您可以在不知道实际类型的情况下调用 toString()
,如果您的实例实际上是 ChildA
,您将获得 data2
。
关于c++ - 多态性:从基类数组访问派生类元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27194911/