在 C++ 中从父 class 的对象调用子 class 的方法

Calling method of child class from object of parent class in C++

我有一个 Item 个对象的动态列表,初始化如下:

Item * items = new Item[size];

其中 size 是之前初始化的整数。

我用 Book 个对象填充此列表,其中 BookItem 的子项。 BookItemclasses都有方法print,它输出一定的信息数组到控制台。我希望能够调用 items[x].print() 以调用 Book 中的 print 方法,它看起来像这样:

void print() {
    Item::print(); //call to print method of parent class
    <printing out some information>
}

基本上,我想调用subclass的print方法Book,它又调用Itemprint方法,打印出更一般的信息。但是,使用 items[x].print() 只会调用 Item 中的 print 方法。如何在 Item 类型的数组 items 中调用 Book class 的 print 方法?

当您使用

Item * items = new Item[size];

数组 items 的每个元素都是一个 Item 对象。即使 print() 是虚函数,如果您使用 Book::print() 也永远不会被调用:

items[x].print();

为了能够调用Book::print(),您需要存储指针,而不是对象。

Item** items = new Item*[size];

那么,您可以使用:

items[x]->print();

只要你用正确定义的指针填充数组。

示例:

Item** items = new Item*[5];
items[0] = new Book;
items[0]->print();