2011-06-16 106 views

回答

0

當您有多個派生類。而且在編譯時你不知道哪個派生類將在運行時實例化。基類指針優於派生類指針。

0

當你想要使用派生類接口,或者當你想確保你正在處理這個特定的基類實現,或者當你想調用一個非虛函數時,使用派生類指針在派生類中定義。

在其他情況下,沒關係。

1

這取決於你爲什麼得到。如果它是用於OO實現的,大多數情況下,您將使用指向基類的指針( 通常通過抽象);如果派生類定義擴展接口,則只會使用派生類 的指針。但C++中的繼承是一種技術,並且它經常用於其他 的目的。 (想想一個迭代器類,它從 實例化std::iterator繼承的,這是不OO派生和 you'ld從未使用指針的std::iterator的實例。)

我會經常使區分,使用OO概念的「推導」,對C++技術使用「繼承」。但這絕不是標準,術語差別很大,所以你通常必須先找出作者正在談論的內容:OO設計或C++ 實現。而且有時你會意識到自己並不知道他自己;他在自己的想法中混淆了兩者。繼承 是用於實現面向對象派生的C++語言結構,但是這種語言結構可以用於其他事情。

0

當您有多個派生類但您想從派生類類型中抽象出自己時,將使用基類指針。這可以在這樣的情況下是例如非常有用:

class Animal { 
     Animal(); 
} 

class Dog : public Animal { 
     Dog(); 
} 

class Cat : public Animal { 
     Cat(); 
} 

正如你看到的,在這個例子中,你有一個基類(動物)和兩個派生類(貓和犬)。現在讓我們說你正在運行一個動物園(只有貓和狗:)),並且你需要保留一個動物列表。你可以創建兩個單獨的列表,一個用於貓,另一個用於狗。然而,如果你認爲貓和狗只是動物,你可以創建一個指向動物的列表。

這樣,通過從派生類類型中抽象出自己,可以通過指向基類的簡單指針來處理不同的派生類。

派生類指針是完全不同的,因爲它們只能「表示」派生類的類型。

相關問題