子類父類同名virtual函式(引數相同), 用子類的指標,引用,物件訪問時,子類會覆蓋父類方法(只能訪問子類方法)。
子類父類同名virtual函式(引數相同), 用父類的指標,引用,物件訪問時,子類會覆蓋父類方法(只能訪問子類方法)。
子類父類同名virtual函式(引數不同), 用子類的指標,引用,物件訪問時,子類會覆蓋父類方法(只能訪問子類方法)。
子類父類同名virtual函式(引數不同), 用父類的指標,引用,物件訪問時,父類會覆蓋子類方法(只能訪問父類方法)。
子類父類同名virtual函式(函式型別不同const/non-const), 用子類的指標,引用,物件訪問時,子類會覆蓋父類方法(只能訪問子類方法)。
子類父類同名virtual函式(函式型別不同const/non-const), 用父類的指標,引用,物件訪問時,父類會覆蓋子類方法(只能訪問父類方法)。
結論:引數和函式型別是c++編譯器判斷要不要多型的關鍵因素。注: 返回型別不同時,編譯器會報錯,virtual不能和static連用。靜態成員函式,沒有隱藏的this指標,virtual函式一定要通過物件來呼叫,既要this指標。
改進::如果子類指標想訪問到父類,可以在子類裡加入:using 父類名::函式名;如pderived->fn2(); 訪問父類方法,在classa裡面加入using base::fn2,就可以訪問了。如果父類指標想訪問到子類,就需要指標轉換了。
子類父類同名non-virtual函式(無論引數/返回/函式型別(const或static)),用子類的指標,引用,物件訪問,子類會覆蓋父類方法(只能訪問子類方法)。
子類父類同名non-virtual函式(無論引數/返回/函式型別(const或static)),用父類的指標,引用,物件訪問,父類會覆蓋子類方法(只能訪問父類方法)。
結論: non-virtual函式,既沒有任何多型效果,如果父類要訪問子類,只用指標轉換。
C private繼承與public繼承
private 只能由1.該類中的函式 2.其友元函式訪問。不能被任何其他訪問,該類的物件也不能訪問。protected 可以被1.該類中的函式 2.子類的函式 3.其友元函式訪問。但不能被該類的物件訪問。public 可以被1.該類中的函式 2.子類的函式 3.其友元函式訪問,也可以由4.該類的物...
private繼承與public繼承
private 能夠訪問 1.該類中的函式 2.友元函式。不能訪問 1.public繼承的子類和private繼承子類 2.該類的物件。protected 能夠訪問 1.該類中的函式 2.public繼承的子類和private繼承子類 3.友元函式。不能訪問 1.該類的物件。public 能夠訪問 ...
C private繼承與public繼承
private 只能由1.該類中的函式 2.其友元函式訪問。不能被任何其他訪問,該類的物件也不能訪問。protected 可以被1.該類中的函式 2.子類的函式 3.其友元函式訪問。但不能被該類的物件訪問。public 可以被1.該類中的函式 2.子類的函式 3.其友元函式訪問,也可以由4.該類的物...