假設我有Animal類,而另一類Dog是從Animal繼承而來的。如果我輸入一個Dog對象作爲一個Animal對象,是否有可能在後來知道它最初是一個Dog?我可以告訴,如果一個對象類型轉換成父類最初是子類在C++中?
具體而言,這裏是我想要做的要點:
class Animal {};
class Dog: Animal {};
class Owner {
bool takeOnWalk(Animal* animalIn);
};
bool Owner::takeOnWalk(Animal* animalIn) {
If (animalIn->isA(Dog)) {return true}; // what do I use here instead of isA?
return false;
}
int main() {
Dog* fido = new Dog();
Animal* gato = new Animal();
Owner* fred = new Owner();
Owner->takeOnWalk(fido); //I want this to return true
Owner->takeOnWalk(gato); //this should return false
{
我已經嘗試了一些事情喜歡的typeof除非據我瞭解,這些會告訴我它的動物一旦物體被鑄造成動物。理想情況下,會有一些操作嘗試將動物投射到狗身上,但如果物體不能投射到狗身上則會返回錯誤。
也許這裏的一個重要提示是,對於我的應用程序,我無法控制Dog和Animal的細節,並且類型轉換髮生在我沒有編寫的代碼中,所以我沒有看到泛型的明顯解決方案。看起來這種事情會很常見,所以我可能在這裏錯過了一些簡單的東西。有什麼建議麼?
你需要一個虛擬成員在基類('虛擬〜動物(){}'是一個不錯的選擇)和'dynamic_cast的(animalIn)'(ISA) –
2015-02-10 21:55:21