基类转派生类
1、如果你以一個"基類之指針"指向一個"派生類之對象",那么經由該指針你只能調用該基類所定義的函數
2、如果你以一個“派生類之指針”指向一個“基類之對象”,你必須先做明顯的轉型操作(explicit cast),這種作法很危險。
與50位技術專家面對面20年技術見證,附贈技術全景圖
2、如果你以一個“派生類之指針”指向一個“基類之對象”,你必須先做明顯的轉型操作(explicit cast),這種作法很危險。
3、如果基類和派生類都定義了“相同名稱之函數”,那么通過對象指針調用成員函數時,到底調用了那個函數,必須視該指針的原始類型而定,而不是視指針實際所指的對象的類型而定,這與第1點其實意義相通。
class A { public:virtual void f1(){cout<<1;}void f2(){cout<<2;} }; class B:public A { public:int i;void f1(){cout<<3;}void f2(){cout<<4;} }; int main() { B* pB;A a;pB=(B*)&a;pB->f1 ();//這個虛函數,是回調的基類的pB->f2();//派生類對象不存在,竟然還可以調用派生類的函數//pB->i = 5;return 0; }
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結