日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中重载、重写(覆盖)和隐藏的区别实例分析

發布時間:2023/11/30 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中重载、重写(覆盖)和隐藏的区别实例分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.重載:重載從overload翻譯過來,是指同一可訪問區內被聲明的幾個具有不同參數列(參數的類型,個數,順序不同)的同名函數,根據參數列表確定調用哪個函數,重載不關心函數返回類型。

示例代碼如下:

1

2

3

4

5

6

7

8

class A{

public:

??void test(int i);

??void test(double i);

??void test(int i, double j);

??void test(double i, int j);

??int test(int i);???????? //錯誤,非重載

};

前四個互為重載函數,最后一個和第一個不是重載函數。

2.隱藏:隱藏是指派生類的函數屏蔽了與其同名的基類函數。注意只要同名函數,不管參數列表是否相同,基類函數都會被隱藏。

#include<iostream> using namespace std; class A { public:void fun1(int i, int j) { cout << "A::fun1() : " << i << " " << j << endl; } };class B : public A { public://隱藏void fun1(double i) { cout << "B::fun1() : " << i << endl;} };int main() {B b;b.fun1(5); //調用B類中的函數b.fun1(1, 2); //出錯,因為基類函數被隱藏return 0; }

3.重寫:重寫翻譯自override,也翻譯成覆蓋(更好一點),是指派生類中存在重新定義的函數。其函數名,參數列表,返回值類型,所有都必須同基類中被重寫的函數一致。只有函數體不同(花括號內),派生類調用時會調用派生類的重寫函數,不會調用被重寫函數。重寫的基類中被重寫的函數必須有virtual修飾。

實例代碼如下:

#include<iostream> using namespace std; class A { public:virtual void fun3(int i) { cout << "A::fun3() : " << i << endl; }}; class B : public A { public://重寫virtual void fun3(double i) { cout << "B::fun3() : " << i << endl; } }; int main() {A a;B b;A* pa = &a;pa->fun3(3);pa = &b;pa->fun3(5);return 0; }

重載和重寫的區別:

  • 范圍區別:重寫和被重寫的函數在不同的類中,重載和被重載的函數在同一類中。
  • 參數區別:重寫與被重寫的函數參數列表一定相同,重載和被重載的函數參數列表一定不同。
  • virtual的區別:重寫的基類必須要有virtual修飾,重載函數和被重載函數可以被virtual修飾,也可以沒有。

隱藏和重寫,重載的區別:

  • 與重載范圍不同:隱藏函數和被隱藏函數在不同類中。
  • 參數的區別:隱藏函數和被隱藏函數參數列表可以相同,也可以不同,但函數名一定同;當參數不同時,無論基類中的函數是否被virtual修飾,基類函數都是被隱藏,而不是被重寫。

?

參考資料

1.?C++中重載、重寫(覆蓋)和隱藏的區別實例分析

總結

以上是生活随笔為你收集整理的C++中重载、重写(覆盖)和隐藏的区别实例分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。