C 過載 重寫 重定義

2022-05-21 15:15:06 字數 1608 閱讀 5292

一、過載(overload)

指函式名相同,但是它的參數列列個數或順序,型別不同。但是不能靠返回型別來判斷。

(1)相同的範圍(在同乙個作用域中) ;

(2)函式名字相同;

(3)引數不同;

(4)virtual 關鍵字可有可無。

(5)返回值可以不同;

二、重寫(也稱為覆蓋 override)

是指派生類重新定義基類的虛函式,特徵是:

(1)不在同乙個作用域(分別位於派生類與基類) ;

(2)函式名字相同;

(3)引數相同;

(4)基類函式必須有 virtual 關鍵字,不能有 static 。

(5)返回值相同(或是協變),否則報錯;<—-協變這個概念我也是第一次才知道…

(6)重寫函式的訪問修飾符可以不同。儘管 virtual 是 private 的,派生類中重寫改寫為 public,protected 也是可以的

三、重定義(也成隱藏)

(1)不在同乙個作用域(分別位於派生類與基類) ;

(2)函式名字相同;

(3)返回值可以不同;

(4)引數不同。此時,不論有無 virtual 關鍵字,基類的函式將被隱藏(注意別與過載以及覆蓋混淆) 。

(5)引數相同,但是基類函式沒有 virtual關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆) 。

#include #include 

using

namespace

std;

class

base

//overload the base::a(int) function

virtual

void a(double x)

virtual

void b(int x)

void c(int x)

};class derived : public

base

//override the base::b(int) function

void b(int x)

//redefine the base::c() function

void c(int x)

};int

main()

通過這裡可以看出:

1.base類中的第二個函式a是對第乙個的過載

2.derived類中的函式b是對base類中函式b的重寫,即使用了虛函式特性。

3.derived類中的函式a是對base淚中函式a的隱藏,即重定義了。

4.pb指標是乙個指向base型別的指標,但是它實際指向了乙個derived的空間,這裡對pd呼叫函式的處理(多型性)取決於是否重寫(虛函式特性)了函式,若沒有,則依然呼叫基類。

5.只有在通過基類指標或基類引用 間接指向派生類型別時多型性才會起作用。

6.因為base類的函式c沒有定義為virtual虛函式,所以derived類的函式c是對base::c()的重定義。

C 過載重寫重定義

includeusing namespace std 函式過載 必須在同乙個類中進行 子類無法過載父類的函式,父類同名函式將被名稱覆蓋 過載是在編譯期間根據引數型別和個數決定函式呼叫 函式重寫 必須發生於父類和子類之間 並且父類和子類中的函式必須有完全相同的原型 使用virtual宣告之後能夠產生多...

C 過載 重寫 重定義

指函式名相同,但是它的參數列列個數或順序,型別不同。但是不能靠返回型別來判斷。1 相同的範圍 在同乙個作用域中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。5 返回值可以不同 是指派生類重新定義基類的虛函式,特徵是 1 不在同乙個作用域 分別位於派生類與基類 2 函式名字相同...

過載重寫重定義

傳智掃地僧課程學習筆記。過載發生了同乙個類中,這個很簡單,不用多說,重寫和重定義,發生了兩個類之間,有virtual關鍵字的,將發生多型,即重寫,沒有的,是重定義,說2個情況,1,若是子類呼叫父類中的函式,並且這個函式名,是名字,在子類中沒有,那麼子類物件可以直接呼叫父類的函式,2,若是這個被呼叫的...