VC小專案 13 0專案導引(1)

2021-07-14 02:56:42 字數 1469 閱讀 1540

程式閱讀——多型性與抽象類

(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 課程詳情 詳情...