我有一个MyApp
对象的动态列表,初始化如下:
Item
其中Item * items = new Item[size];
是先前初始化的整数。
我使用size
个对象填充此列表,其中 Book
是Book
的孩子。 Item
和Book
类都有方法Item
,它向控制台输出一定数量的信息。我希望能够致电print
,以便在items[x].print()
中调用print
方法,如下所示:
Book
基本上,我想调用子类void print() {
Item::print(); //call to print method of parent class
<printing out some information>
}
的{{1}}方法,后者又调用print
的{{1}}方法,该方法打印出更多一般信息。但是,使用Book
仅调用print
中的Item
方法。如何调用items[x].print()
类型的数组print
中Item
类的print
方法?
答案 0 :(得分:3)
使用时
Item * items = new Item[size];
数组items
的每个元素都是Item
个对象。即使print()
是虚函数,如果使用:{/ p>,也永远不会调用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();