我有一個非常普遍的問題,在C++中的dynamic_cast相關: 假設我們有以下類別:dynamic_cast的派生
class Father{
public:
Father(...); // this is constructor
//.....
//.. Whatever code in here, not important
~ Father(); //destructor
protected:
// some protected variables
} // end of class Father
class Son:public Father {
public:
Son(...); // this is cnostructor
//.....
//.. Whatever code in here, not important
~ Son(); //destructor
protected:
// some protected variables
} // end of class Son
class Another{
public:
Another(...); // this is constructor
//.....
//.. Whatever code in here, not important
~ Another(); //destructor
AnotherMethod(Father* fatherOpj,......) //
} // end of class Another
而且我們說的方法「AnotherMethod」做下一個:
AnotherMethod(Father* fatherOpj,......)
{
Son *sonObj = dynamic_cast<Son*>(fatherOpj);
// using sonObj
}
雖然在主,我們做以下幾點:
Son* son1=Null;
//...
son1 = new Son(.....);
//....
AnotherMethod(son1,....);
現在,我想知道下一個問題:那樣 - 當我們用一個Son *類型的指針調用AnotherMethod時,在它的簽名中有父親* - 我們將失去兒子(哪個父親沒有)的字段/成員 或者做dynamic_cast我們將能夠擁有它們(在它們內部有正確的值)?!
您將能夠使用'son'的數據成員和成員函數'sonObj-> x'。但是,除非這是一個人爲的例子,否則「兒子」可能不應該來自「父親」。另外請注意,你並沒有檢查'dynamic_cast'是否返回了一個空指針。 – Simple
請注意,如果沒有至少一個虛函數(通常是基類析構函數),'dynamic_cast'將不起作用。 – Sean
@Simple在我自己的代碼中,我只在確實知道我得到的參數(father * fatherOpj)是一個兒子*的情況下才執行轉換,在這種情況下,是否存在空值? – user2750466