在 C++ 中从父 class 的对象调用子 class 的方法
Calling method of child class from object of parent class in C++
我有一个 Item
个对象的动态列表,初始化如下:
Item * items = new Item[size];
其中 size
是之前初始化的整数。
我用 Book
个对象填充此列表,其中 Book
是 Item
的子项。 Book
和Item
classes都有方法print
,它输出一定的信息数组到控制台。我希望能够调用 items[x].print()
以调用 Book
中的 print
方法,它看起来像这样:
void print() {
Item::print(); //call to print method of parent class
<printing out some information>
}
基本上,我想调用subclass的print
方法Book
,它又调用Item
的print
方法,打印出更一般的信息。但是,使用 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();
我有一个 Item
个对象的动态列表,初始化如下:
Item * items = new Item[size];
其中 size
是之前初始化的整数。
我用 Book
个对象填充此列表,其中 Book
是 Item
的子项。 Book
和Item
classes都有方法print
,它输出一定的信息数组到控制台。我希望能够调用 items[x].print()
以调用 Book
中的 print
方法,它看起来像这样:
void print() {
Item::print(); //call to print method of parent class
<printing out some information>
}
基本上,我想调用subclass的print
方法Book
,它又调用Item
的print
方法,打印出更一般的信息。但是,使用 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();