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
- 物件導向重寫(override)與過載(overload)區別物件IDE
- Java中的過載和重寫Java
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- 面試官:Java的重寫和過載有什麼區別?面試Java
- 重寫、覆蓋、過載、多型幾個概念的區別分析多型
- override(重寫) and overload(過載)IDE
- 方法重置和重寫的區別
- c++繼承,隱藏(重定義)C++繼承
- C++重寫C++
- 淺談C#中重寫和隱藏的區別C#
- Java 重寫(Override)與過載(Overload)JavaIDE
- Python中有重寫和過載的方法嗎?Python
- Java-override重寫與overload過載JavaIDE
- Java中方法重寫與方法過載Java
- Redpanda:用C++重寫的KafkaC++Kafka
- 重學java之類的定義Java
- qt之函式重定義QT函式
- C++過載的奧義之運算子過載C++
- C++ 定義靜態成員 static 關鍵字不能在定義出重複出現C++
- AI回答記錄:python中有過載與重寫的概念嗎?AIPython
- 重建模與重構的區別
- Oracle EBR 基於版本重定義Oracle
- java 中為什麼重寫 equals 後需要重寫 hashCodeJava
- 從jvm角度看懂類初始化、方法過載、重寫。JVM
- 從jvm角度看懂類初始化、方法重寫、過載。JVM
- 關於繼承、重寫、過載的易混淆之處的總結繼承
- 道重山寫幾滿話自過度重感性GZQC
- C++ 重解釋型別轉換C++型別
- php定義常量方法的區別PHP
- NodeJS 說說“重寫” 自定義stream 的實現NodeJS
- Laravel重寫資源路由自定義URLLaravel路由
- JavaBean重寫Object類中的方法JavaBeanObject
- C++八股之函式過載與重寫-靜態多型與動態多型C++函式多型
- DMAIC定義階段的重點是什麼?AI
- 方法的重寫
- jQueryEasyUI重寫datagrid的datetimebox編輯型別jQueryUI型別