c++ - 多态性:从基类数组访问派生类元素

标签 c++ arrays class dynamic polymorphism

我有一段时间没有使用派生类和多态性了,我不知道如何访问派生类数据项。

// 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/

相关文章:

c++ - 实例化和删除对象 C++

c++ - SQLite DB(带 WAL)在准备 "select"statmement 时被锁定 - 为什么?

c++ - GIZA++ 输出缺少 *.ti.final 和 *actual.ti.final 文件

c - 指向结构数组的指针数组

python - super().method() 与 super(self.__class__,self).method() 的区别

c++ - 包含类对象的最佳 C++ 设计是什么?

android - 我无法停止在Android cocos2dx中播放循环sfx

java - 出于语法原因,是否值得使用长度为 2 的数组而不是两个变量?

arrays - Swift 过滤对象数组与另一个对象数组

arrays - 带有动态数组的 DELPHI 类在 SetLength() 中有问题