程式閱讀——多型性與抽象類
(1)虛函式
#includeusing namespace std;
class a
virtual void print()const
輸出:5ee5e
除錯過程:
除錯心得:通過虛函式,可以通過基類的指標達到訪問子類成員函式的目的,去掉virtual關鍵字將得到不一樣的結果(參看附錄令人迷惑的隱藏規則)。
(2)虛析構函式
#include using namespace std;
class base
virtual ~base() ;
class firstderived:public base
};class secondderived:public base
};int main()
輸出:fffs
除錯心得:
基類為純虛函式,不能通過基類的引用來訪問派生類的同名函式,只能通過基類的指標來訪問。
附錄:
令人迷惑的隱藏規則
本來僅僅區別過載與覆蓋並不算困難,但是c++的隱藏規則使問題複雜性陡然增加。
這裡「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,規則如下:
(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual
關鍵字,基類的函式將被隱藏(注意別與過載混淆)。
(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual
關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)。
舉例:
//注意:
//1、有virtual才可能發生多型現象
//2、不發生多型(無virtual)呼叫就按原型別呼叫
#includeusing namespace std;
class base
void g(float x)
void h(float x) };
class derived : public base
void g(int x)
void h(float x) };
int main(void)
輸出:
上面的程式中:
(1)函式derived::f(float)覆蓋了base::f(float)。
(2)函式derived::g(int)隱藏了base::g(float),而不是過載。
(3)函式derived::h(float)隱藏了base::h(float),而不是覆蓋。
VC小專案 13 0專案導引(2)
1 請寫出程式的執行結果,並在除錯時對照理解 include using namespace std class vehicle 交通工具 請回答 當基類的指標指向派生類時,用指標呼叫同名成員函式,執行的是基類的成員函式,還是派生類的成員函式?為什麼會這樣?答 輸出結果 說明執行的是基類的成員函式。...
1 專案介紹
專案介紹 要掌握幾個技術 1,vue django的前後端分離的技術 2,徹底掌握restful api的開發流程 3,django rest framework功能實現和核心原始碼分析,4,sentry完成線上系統的錯誤日誌的監控和告警,5,第三方登陸和支付寶支付的整合,6,本地除錯遠端伺服器 的...
1 專案準備
前期專案的準備,需要進行專案分析需求,pip換源,虛擬環境的搭建.專案是模仿 路飛學城 這個 的。我們通過路飛學城 分析了一下這個 的功能和需求 1 首頁功能 輪播圖 2 使用者功能 多方式登入 手機驗證碼登入 手機驗證碼註冊 傳送驗證碼介面 3 課程功能 查詢所有課程 過濾功能 4 課程詳情 詳情...