C 之過載重寫重定義

2021-07-14 02:00:55 字數 2160 閱讀 2502

概念:函式有同樣的名稱,但是引數列表不相同的情形,這樣的同名不同引數的函式之間,互相稱之為過載函式。

基本條件:

注意:

概念:也稱為覆蓋,子類重新定義父類中有相同名稱和引數的虛函式,主要在繼承關係中出現。

基本條件:

注意:驗證程式:

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

4041

4243

4445

4647

4849

5051

5253

5455

5657

5859

6061

6263

6465

6667

6869

7071

7273

classa;

classb:

publica;

class

cvirtuala*

func2

()// error:靜態函式不能被宣告為virtual,也就沒辦法被重寫。

// static virtual void funcstatic() {}

//由於func3被宣告為private,所以需要通過public函式來呼叫

void

showfunc3

()virtual

void

func4

()private

:virtual

void

func3

()};

classd:

public

c// ok: 當返回值為指標或者引用時,返回值可以是父類返回值型別的子類

virtualb*

func2

()// error: 除上面的情況,返回值型別要和父類一直

/*virtual bool func2() */

// ok: 重寫的函式的訪問修飾符可以不同於被重寫的函式

virtual

void

func3

()private

:// ok: 重寫的函式的訪問修飾符可以不同於被重寫的函式

virtual

void

func4

()};

int_tmain

(int

argc

,_tchar

*argv

)

輸出:

123

4

class d: func 1

class d: func 2

class d: func 3

class d: func 4

int func1()將子類void func1()改為 編譯

error: conflicting return type specified for 『virtual int d::func1()』

int func1()

virtual

void

func2

(inta)

};classb:

public

a// 將會重寫(override)父類方法

void

func2

(inta)

// 將會重定義父類的方法

void

func2

(inta,

intb)};

int_tmain

(int

argc

,_tchar

*argv

)

輸出:

1

23

class b: func1

class b: func2-1

class b: func2-2

c 之 過載 重寫 重定義

函式過載 必須在同乙個類中進行 子類無法過載父類的函式,父類同名函式將被子類名稱覆蓋 過載是在編譯期間根據引數型別和個數決定函式的呼叫 靜態聯編 函式重寫與重定義 重寫 必須發生在基類和派生類之間,並且父類與子類的函式必須有完全相同的函式原型 使用virtual關鍵字宣告之後能夠產生多型 如果不使用...

C 過載重寫重定義

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

C 過載 重寫 重定義

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