C++中過載、重寫、重定義的區別
函式過載:
過載是指相同的函式名,不同的引數列表(與返回值無關)
1、函式的名字必須相同
2、函式的引數列表必須不同,與引數列表的順序無關
3、返回值型別可以不同
函式重寫(覆寫)
覆寫是指子類的成員函式覆蓋了父類的虛擬函式
1、不同的範圍,分別位於基類和派生類中
2、函式名相同
3、引數列表相同
4、返回值相同
5、基類函式必須有virtual關鍵字
6、只有虛方法或抽象方法才能夠被覆寫
重定義(隱藏)
函式重定義指的是子類的成員函式遮蔽了與其同名的父類函式
1、如果派生類的函式和基類的函式同名,但是引數不同,此時,不管有無virtual,基類的函式被隱藏。
2、如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有vitual關鍵字,此時,基類的函式被隱藏。否則就是重寫。
程式碼示例:
#include <iostream>
using namespace std;
class Base {
public:
// 普通成員函式
void func() {
cout << "it's Base func()" << endl;
}
// 函式過載 func()
void func(int a) {
cout << "it's Base func(), a = " << a << endl;
}
// 虛擬函式
virtual void func2() {
cout << "it's Base func2()" << endl;
}
};
class Derived : public Base {
public:
// 覆寫父類的虛擬函式
// 也是對父類的func2()進行重定義,只不過帶有virtual關鍵字
void func2() {
cout << "it's child 2" << endl;
}
// 重定義 : 對於父類的func()
void func(int a) {
cout << "it's child func(), a = " << a << endl;
}
};
int main() {
Base* b; // 父類指標
Derived d; // 子類物件
b = &d;
b->func(); // Base func() 子類繼承了父類的public介面,因此可以訪問父類介面
b->func(100); // Base func(2) 子類繼承了父類的public介面,因此可以訪問父類介面
b->func2(); // Derived func2() 多型
d.func(100); // Derived func() 子類物件的介面
d.func2(); // Derived func2() 子類物件的介面
return 0;
}
程式碼輸出:
it's Base func()
it's Base func(), a = 100
it's child 2
it's child func(), a = 100
it's child 2
謝謝閱讀
相關文章
- java中過載與重寫的區別Java
- 過載和重寫的區別
- Java—重寫與過載的區別Java
- c++中的隱藏及過載、重寫與隱藏的區別C++
- Java中的過載和重寫Java
- C/C++—— C++中函式重寫和函式過載C++函式
- 面試官:Java的重寫和過載有什麼區別?面試Java
- 重寫、覆蓋、過載、多型幾個概念的區別分析多型
- 物件導向重寫(override)與過載(overload)區別物件IDE
- 類成員函式的重寫,過載和隱藏的區別函式
- Java 重寫和過載區別——物件導向的多型性分析Java物件多型
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- 【JAVA】重寫和過載Java
- 方法重置和重寫的區別
- c++繼承,隱藏(重定義)C++繼承
- 【c#】重寫和過載C#
- C++重寫C++
- 淺談C#中重寫和隱藏的區別C#
- 重構、重新架構、再設計與重寫的區別架構
- Oracle中重建表的線上重定義Oracle
- override(重寫) and overload(過載)IDE
- c#之重寫與過載的區別與聯絡_摘自.NEt專家部落格!C#
- Java中方法重寫與方法過載Java
- android中自定義屬性重複定義Android
- oracle 線上重定義Oracle
- Oracle線上重定義Oracle
- Python中有重寫和過載的方法嗎?Python
- Oracle的線上重定義(轉)Oracle
- 一個C++巨集定義與列舉定義重複的編譯錯誤C++編譯
- Redpanda:用C++重寫的KafkaC++Kafka
- Java 重寫(Override)與過載(Overload)JavaIDE
- Online Redefinition線上重定義(三)--多表關聯重定義案例
- 重定義一些基本資料型別資料型別
- Oracle Online Redefinition線上重定義(中)Oracle
- oracle 表線上重定義Oracle
- oracle表線上重定義Oracle
- 【Oracle】線上重定義表Oracle
- 重學java之類的定義Java