C 中過載,重寫,隱藏的區別

2021-08-07 01:44:39 字數 2289 閱讀 1766

過載:

過載是指在同乙個作用域下,函式的函式名相同,但是函式引數的個數,或者引數的型別,引數的順序不同。這時函式之間就構成了過載關係,這裡需要注意的是,如果函式的引數列表完全相同,僅僅是返回值型別不同並不能構成過載。同乙個作用域又怎麼理解呢?在這裡主要分兩種情況討論,一種是在類外但是函式在同乙個cpp檔案中屬於同乙個作用域,另一種是在類中也屬於同乙個作用域。

函式在類外,但是同在乙個cpp檔案

//

函式在類外,但是同在乙個cpp檔案

#include

using

namespace

std;

void test(int i) //

函式1void test(double i) //

與函式1引數個數相同,引數型別不同,構成過載

void test(int i, int j) //

與函式1引數型別相同,但是引數個數不同,構成過載

int test(int i) //

僅返回值型別不同,不能構成過載

函式在類內,這裡有一種情況下也可以構成過載,函式名,引數列表完全相同,但是函式有const關鍵字修飾

//

函式在同乙個類中

#include

using

namespace

std;

class

a ~a(){};

void test(int i) //

函式1

void test(double i)//

與函式1引數個數相同,引數型別不同,構成過載

void test(int i, int j)//

與函式1引數型別相同,但是引數個數不同,構成過載

void test(int i) const

//與函式1引數型別引數個數相同,有const 關鍵字修飾,構成過載

};

重寫(覆蓋):

重寫也叫做覆蓋,發生在父類和子類中,當父類中有虛函式時,在子類中重新定義乙個與父類虛函式函式名,函式引數列表一模一樣的函式,並重寫函式的具體實現,此種情況就構成了重寫。

//

重寫#include

using

namespace

std;

class

a ~a(){};

virtual

void

test()

};class b :public

a ~b(){}

virtual

void test()//

virtual關鍵字可寫可不寫

};

隱藏:

隱藏也發生在父類和子類中,主要包含兩種情況:

1、子類和父類的函式名,引數型別完全相同,但是父類函式沒有virtual關鍵字修飾

2、子類和父類函式名相同,但是引數列表不同,此時不管有沒有virtual關鍵字修飾,都能構成隱藏

//

子類和父類的函式名,引數型別完全相同,但是父類函式沒有virtual關鍵字修飾

#include

using

namespace

std;

class

a ~a(){};

void

test()

};class b :public

a ~b(){}

void

test()

};

//

子類和父類函式名相同,但是引數列表不同,此時不管有沒有virtual關鍵字修飾,都能構成隱藏

#include

using

namespace

std;

class

a ~a(){};

void test(int

i)

};class b :public

a ~b(){}

void

test()

};//  父類的 test函式需要傳入乙個int型別的引數,子類的test引數不需要傳入任何引數,此時若有如下語句:

//  b b;

//  b.test(1);  //報錯

//  因為子類中的 void test() 函式已經把父類中的  void test(int i)  函式隱藏,這種方式下子類物件 b 並訪問不到 void test(int i),此時可通過 b.a::test(1) 這種方式訪問

C 的過載 重寫 隱藏

在同乙個class中 class demo 在同一訪問區內 如在同一.c cpp檔案內 即不在struct或者class中 4個fun都是過載函式 intfun int a void fun double a int fun int a,int b int fun float a 父類 class ...

過載 重寫 隱藏

共同點 函式名相同 定義 1 如果在類裡函式名相同但是形參不同,則為過載。形參不同包括形參的型別個數以及順序。2 類間。重寫和隱藏都發生在基類和派生類之間。重寫 覆蓋 發生在派生類和基類之間。必須滿足兩個條件 1 基類有virtual宣告 2 函式名和形參必須完全相同。隱藏 發生在派生類和基類之間,...

C 中過載 重寫(覆蓋)和隱藏的區別

基本概念 過載 是指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。示例 class a 隱藏 是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。示例 incl...