C 繼承之 過載 覆蓋 隱藏

2021-08-07 02:12:56 字數 1751 閱讀 5117

在c++ 繼承中經常會遇到函式過載、覆蓋、隱藏這三個玩意,但是這三者的本質區別又是什麼,自己在網上和資料里查後並通過**證實,下面我們看看者三者的本質:

1、過載:

過載是c++獨有的乙個特性,c下面是沒有的,具體分析請看:

這裡我們來具體看看過載,過載特點:

1)在同一範圍

2)函式名相同

3)引數不同

4)返回值可以相同也可以不同

5)有無virtaul都可以

執行結果:

雖然是同名同返回值,但是引數的不同條用的函式還是不同的。

2、覆蓋:

1)覆蓋是在繼承中存在的,

2)兩個函式分別在基類和派生類中

3)這裡兩個函式函式名、引數型別和引數型別順序、函式返回值型別都必須相同,

4)而且父類中的函式必須加virtual,

5)只有父類指標指向子類物件或者父類物件引用子類物件才能使用

在**中加了通過作用域找基類被覆蓋的函式。

執行結果:

3、隱藏:

前面區別過載和覆蓋通過他們的特性我們發現還是比較容易的,但是如果加了隱藏就不是那麼容易了,三者很容易混淆:

1)如果父類函式和子類的函式同名,但是引數不同,不管有沒有virtual關鍵字,基類的函式將被隱藏(別與過載混淆,這是在不同範圍裡的)

2)如果子類的函式和父類的函式同名,且引數型別和引數型別順序相同,但是父類沒有virtaul關鍵字。這時父類的函式同樣被子類的函式隱藏(別和覆蓋混淆,沒有virtual)

執行結果:

我們把這三個型別糅雜在一起看一下:

執行結果:

案例分析後我們總結一下:

過載和覆蓋去區別是:

相同點:函式名相同

不同點:範圍、引數型別和引數型別順序,覆蓋必須有virtual關鍵字。

過載和隱藏規則1:

相同點:函式名

不同點:範圍不同

覆蓋和隱藏規則2:

相同點:函式名、函式引數型別和函式引數型別順序都必須。

不同點:關鍵字virtual.

C 的過載 覆蓋 隱藏 繼承

函式過載 函式的繼承 這個不多說 子類繼承父類的公有變數 函式的覆蓋 也是重寫 關於子類修改了父類的成員函式 所以呼叫跟父類同名的成員函式 顯示的是子類的修改的函式的輸出方式 函式的隱藏 在父類和子類都有同名函式時,可以是顯示父類的函式輸出方式 也可以是顯示子類的輸出方式 但兩者會顯示的原因不同,如...

C 之過載覆蓋和隱藏

繼承體系下同名成員函式的三種關係 在同一作用域內 函式名相同,引數列表不同 分三種情況 引數個數不同,引數型別不同,引數個數和型別都不同 返回值型別可以相同也可以不同 在不同作用域內,分別在父類和子類 函式名相同,引數列表相同,返回值型別相同,協變除外 下面會介紹什麼是協變 基類函式必須有virtu...

c 過載 覆蓋 隱藏

成員函式的過載 覆蓋與隱藏 成員函式的過載 覆蓋 override 與隱藏很容易混淆,c 程式設計師必須要搞清楚 概念,否則錯誤將防不勝防。8.2.1 過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋是指派生類函...