基本概念:
過載:是指同一可訪問區內被宣告的幾個具有不同引數列(引數的型別,個數,順序不同)的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。
示例:
classa;
隱藏:是指派生類的函式遮蔽了與其同名的基類函式,注意只要同名函式,不管引數列表是否相同,基類函式都會被隱藏。
示例:
#include usingnamespace
std;
class
base
};class derive : public
base
};int
main()
重寫(覆蓋):是指派生類中存在重新定義的函式。其函式名,引數列表,返回值型別,所有都必須同基類中被重寫的函式一致。只有函式體不同(花括號內),派生類呼叫時會呼叫派生類的重寫函式,不會呼叫被重寫函式。重寫的基類中被重寫的函式必須有virtual修飾。
示例:
#includeusingnamespace
std;
class
base
};class derived : public
base
};int
main()
過載和重寫的區別:
(1)範圍區別:重寫和被重寫的函式在不同的類中,過載和被過載的函式在同一類中。
(2)引數區別:重寫與被重寫的函式引數列表一定相同,過載和被過載的函式引數列表一定不同。
(3)virtual的區別:重寫的基類必須要有virtual修飾,過載函式和被過載函式可以被virtual修飾,也可以沒有。
隱藏和重寫,過載的區別:
(1)與過載範圍不同:隱藏函式和被隱藏函式在不同類中。
(2)引數的區別:隱藏函式和被隱藏函式引數列表可以相同,也可以不同,但函式名一定同;當引數不同時,無論基類中的函式是否被virtual修飾,基類函式都是被隱藏,而不是被重寫。
示例
#include usingnamespace
std;
class
base
void g(float x)
void h(float x)
};class derived : public
base
void g(int x)
void h(float x)
};int main(void
)
(1)函式derived::f(float)覆蓋了base::f(float)。
(2)函式derived::g(int)隱藏了base::g(float),而不是過載。
(3)函式derived::h(float)隱藏了base::h(float),而不是覆蓋。
C 過載 C 重寫和C 隱藏的區別
c 過載 c 重寫和c 隱藏的定義 c 過載 同乙個作用域內發生 比如乙個類裡面 定義一系列同名方法,但是方法的引數列表不同。這樣才能通過傳遞不同的引數來決定到底呼叫哪乙個。而返回值型別不同是不能構成過載的。c 重寫 繼承時發生,在子類中重新定義父類中的方法,子類中的方法和父類的方法是一樣的 例如 ...
C 過載 隱藏和重寫
1.什麼是過載呢?過載 同乙個作用域,相同函式名,引數列表不同,與返回值是否相同沒有關係,過載又稱靜態多型 過載的作用 減輕程式設計師對函式名的記憶負擔,可讓所有功能相同的函式使用同乙個名字。引數列表不同可表現在 1 引數個數方面 例如 int add int i,int j int add int...
C 過載 重寫 覆蓋 和隱藏的區別
成員函式過載 overload 的特徵 1 相同的範圍 在同乙個類中 2 函式名相同 3 函式引數個數或者函式引數型別不相同 4 virtual關鍵字可有可無。作用 同一方法,根據傳遞訊息的不同 型別或者個數 產生不同的動作 相同的方法名,實現不同 重寫也叫覆蓋 override 覆蓋是指派生類的函...