2015-07-22 116 views
2

的調用方法我有如下被初始化Item對象的動態列表:從父類對象的用C子類++

Item * items = new Item[size]; 

其中size是先前initialzed的整數。

我使用Book對象填充此列表,其中BookItem的子項BookItem類都有方法print,它向控制檯輸出一定數量的信息。我希望能夠調用items[x].print()以調用Bookprint方法,它看起來像這樣:

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

基本上,我想調用子類Book,這反過來又調用printprint方法方法Item,它打印出更一般的信息。但是,使用items[x].print()僅調用Item中的print方法。我如何在Item類型的數組items中調用Book類的print方法?

+0

Q;所以你有Book :: print()調用Item :: print()?然後你還想讓Item :: print()調用Book :: print()?問:當你嘗試時會發生什麼? – paulsm4

+0

它只調用Item中的打印方法,而不是Book。 – applemavs

+0

'print'虛擬? – John3136

回答

3

當使用

Item * items = new Item[size]; 

該數組的每個元素itemsItem對象。

items[x].print(); 

爲了能夠調用Book::print(),你需要存儲的指針,而不是對象:即使print()是一個虛函數,Book::print()將永遠不會,如果你使用的調用。

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

然後,您可以使用:

items[x]->print(); 

只要您填寫了正確定義指針數組。

實施例:

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

完美地工作。 – applemavs