1.派生類作為實參賦給父類形參 一般的父類只繼承子類中共同的部分,子類的新方法會被自動忽略而父類也就無法調用子類的新方法了。 問題:用父類的形參來訪問子類的新方法。 強制類型轉換(這個可能會有風險,但是編譯器不報錯) class Animal{ public: void Live(){ cout<< ...
1.派生類作為實參賦給父類形參
一般的父類只繼承子類中共同的部分,子類的新方法會被自動忽略而父類也就無法調用子類的新方法了。
問題:用父類的形參來訪問子類的新方法。
強制類型轉換(這個可能會有風險,但是編譯器不報錯)
class Animal{
public:
void Live(){
cout<<" Living "<<endl;
}
};
class Dog : public Animal{
public:
void Jump(){
cout<<" Jump "<<endl;
}
};
Animal * b = new Dog;
((Animal* )b) -> Jump(); //ok, 強制轉化
如果父類指針指向子類對象,需要把父類的指針轉化為指向子類對象的指針,來訪問子類擴展成員這就是所謂的向下轉。
但是,向下轉型是危險的,因為父類指針有可能沒有指向子類對象。//這樣試過,編譯器是不報錯的,但是按道理是不好這樣強轉了。//Dog沒有繼承Animal
這樣測試下來就是不報錯。