C 四 過載,重寫,重定義

2021-09-25 14:45:55 字數 1638 閱讀 9265

2 重寫

3 重定義

4 重載重定義與重寫

過載指的是在同乙個作用域內,兩函式的函式名可以相同,但是引數不能完全相同,可以是引數型別不同或者是引數個數不同,至於返回值,不影響過載。

//1、函式過載從底層上來說,還是兩個不同的函式!

//函式會被編譯成_test_int_int

inttest

(int a,

int b)

//a//函式會被編譯成_test_int_double

inttest

(int a,

double b)

//b//2、返回值型別不同不可以構成過載

void

test

(int a,

int b)

//c 會報錯,與a函式相同

intmain()

重寫指的在繼承關係中,子類中定義了乙個與父類極其相似的虛函式。

具體怎麼相似:函式名必須相同,引數列表必須相同,返回值可以不相同,但是必須是父子關係的指標或引用。

通過重寫,可以實現動態多型,如果去掉父類的虛函式的virtual,則構不成多型,如果去掉子類虛函式的virtual可以構成多型,可以理解為編譯器優化。

重定義也叫隱藏,指的是在繼承關係中,子類實現了乙個和父類名字一樣的函式,(只關注函式名,和引數與返回值無關)這樣的話子類的函式就把父類的同名函式隱藏了。

a)如果派生類的函式和基類的函式同名,但是引數不同,此時,不管有無virtual,基類的函式被隱藏。

b)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有vitual關鍵字,此時,基類的函式被隱藏。(如果有virtual就成重寫了)

下面的**有點繞,不過理解了,你就通透了

#include

using

namespace std;

class

base

void

show()

public

:void

exec()

void

fun(string s)

void

fun(

int a)

//overload:兩個fun函式在base類的內部被【過載】

virtual

intfunction()

};class

classa

:public base

//override:基類中display為虛函式,且引數列表一直,故此處為【重寫】

void

fun(

int a,

int b)

//redefining:fun函式在base類中不為虛函式,故此處為重【重定義】

void

show()

//redefining:理由同上

//子類會偷偷繼承父類的方法哦!

intfunction

(int a)

//overload:注意這是過載而不是重寫,因為引數列表不同,在編譯時classa中其實還有個編譯器自己偷偷加上的從base繼承來的int function(){};};

intmain()

C 過載重寫重定義

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

C 過載 重寫 重定義

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

C 過載 重寫 重定義

一 過載 overload 指函式名相同,但是它的參數列列個數或順序,型別不同。但是不能靠返回型別來判斷。1 相同的範圍 在同乙個作用域中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。5 返回值可以不同 二 重寫 也稱為覆蓋 override 是指派生類重新定義基類的虛函式,...