一、基本概念:
過載:是指同一可訪問區內被宣告的幾個具有不同引數列(引數的型別,個數,順序不同)的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。
classa;
重寫(覆蓋):是指派生類中存在重新定義的函式。其函式名,引數列表,返回值型別,所有都必須同基類中被重寫的函式一致。只有函式體不同(花括號內),派生類呼叫時會呼叫派生類的重寫函式,不會呼叫被重寫函式。重寫的基類中被重寫的函式必須有virtual修飾。
#includeusing namespace std;class base
};class derived : public base
};int main()
隱藏:是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。
#include "stdafx.h
"#include
"iostream
"using
namespace
std;
class
base
};class derive : public
base
};int
main()
二、過載和重寫的區別
範圍區別:重寫和被重寫的函式在不同的類中,過載和被過載的函式在同一類中。
引數區別:重寫與被重寫的函式引數列表一定相同,過載和被過載的函式引數列表一定不同。
virtual的區別:重寫的基類必須要有virtual修飾,過載函式和被過載函式可以被virtual修飾,也可以沒有。
三、隱藏與過載,重寫的區別
當基類函式與繼承類函式函式名相同,返回型別,引數列表相同時,基類函式有vitual關鍵字,此時倆者關係為重寫關係,否則為隱藏關係;
當基類函式函式與繼承類函式函式名相同,(返回型別不同的話編譯器會直接報錯)引數列表不同時,不管基類函式是否有vitual關鍵字,倆者都為隱藏關係。
1 #include "stdafx.h
"2 #include 3
4using
namespace
std;56
class
base710
void g(float x)
11void h(float x)
12};
1314
class derived : public
base
1518
void g(int x)
19void h(float x)
20};
2122
int main(void)23
(1)函式derived::f(float)覆蓋了base::f(float)。
(2)函式derived::g(int)隱藏了base::g(float),而不是過載。
(3)函式derived::h(float)隱藏了base::h(float),而不是覆蓋。
摘自:
隱藏:是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。
C 中過載 重寫(覆蓋)和隱藏的區別
基本概念 過載 是指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。示例 class a 隱藏 是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。示例 incl...
C 中過載 重寫(覆蓋)和隱藏的區別
基本概念 過載 是指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。示例 class a 隱藏 是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。示例 incl...
C 中過載 重寫(覆蓋)和隱藏的區別
基本概念 過載 是指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。示例 class a 隱藏 是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。示例 incl...