成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

談談C++中三個容易混淆的概念

開發 后端
本來僅僅區別重載與覆蓋并不算困難,但是C++的隱藏規則使問題復雜性陡然增加。這里“隱藏”是指派生類的函數屏蔽了與其同名的基類函數,一起來看。

JAVA中語言中方法(函數)調用有兩種特殊的形態:重載重寫;而C++由于增加了virtual這個虛函數關鍵字,給函數調用又增加了變數:除了重載、重寫(也稱覆蓋)之外還多了隱藏這么一說。

我相信我們絕大多數人寫代碼時,為了程序的可讀性與趕速度的原則,下意識的避開這些類似于腦筋急轉彎的語法,盡量使用不同的函數名來區分基類與派生類的函數(當然,不能避開的時候也是非常多的)。

可是有時候,有些面試主考官總喜歡拿這三個概念去為難你,考察你的C++基礎是否牢固。所以為了面試、這三個概念還是需要我們去區分一下。

說點個人比較偏激的觀點:重載、重寫是必須要知道,因為用途太廣泛;至于隱藏嗎,完全是C++為面試官設計的(^_^等待挨磚)。

1、重載的特征:在同一個類中;函數名字相同;參數不同;virtual 關鍵字可有可無。

2、重寫(覆蓋)特征是:分別位于派生類與基類;函數名字相同;參數相同;基類函數必須有virtual 關鍵字(這點非常要注意)。

個人認為以上兩點比較容易記得住,但是C++的隱藏規則使問題復雜性陡然增加。規則如下:

1、如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。

2、 如果派生類的函數與基類的函數同名,并且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意別與重寫混淆)。

說了這么多繞口令,恐怕不容易理解,看個簡單的例子吧:

  1. class A{  
  2. public:  
  3. void f(int a);  
  4. };  
  5. class B: public A{  
  6. public:  
  7. void f(char *p)  
  8. };  
  9. void main(){  
  10. int i = 1;  
  11. B b;  
  12. A *pa = &b;  
  13. B *pb = &b;  
  14. pa->f(i);//調用父類A的方法;  
  15. pb->f(i);//這里呢?調用的哪里的方法?  
  16. }; 

按照習慣性思維,覺得main函數中指針pb會調用父類的方法,其實不對,隱藏發生了作用啦,此處符合隱藏的的條件1,所以這里父方法被隱藏掉了,調用的子類的方法,由于參數類型不匹配,編譯器直接報錯!!

如果我們在開發中,完全可以通過編譯,發現此類錯誤,及時的修正就無所謂了。但是可怕的是在面試中,對重寫、重載、隱藏概念不太熟悉的話,就有可能出錯。

其實這個例子,是本人幾年前的面試時的一道面試題中的一部分(實際的題目還要復雜一些),當時對隱藏這個概念了解得不夠,做錯了,所以一直記憶猶新。此時拿出來,希望對需要參加面試的板油有些幫助。

【編輯推薦】

  1. 如何學好C++,用好類庫很重要
  2. C/C++中動態鏈接庫的創建和調用
  3. VC++獲得當前系統時間的幾種方案
  4. 影響C++/C程序的幾大要素
  5. 在C/C++算法設計中使用任意位寬
責任編輯:于鐵 來源: sohu
相關推薦

2023-03-08 07:34:23

響應式更新細粒度更新

2009-11-25 11:20:31

并發

2018-02-25 07:23:23

2010-04-19 09:31:44

KDE

2010-01-28 14:46:08

C++變量

2009-02-02 10:00:11

ADO.NETASP.NET

2022-03-16 10:14:55

C語言C++

2010-06-28 11:08:32

BitTorrent協

2010-03-24 10:32:05

Python多線程

2009-11-10 12:12:57

VB.NET函數

2010-03-24 10:32:05

Python多線程

2021-12-16 22:36:10

開發前端CSS

2021-08-23 16:07:29

人工智能智慧城市安防

2010-03-30 19:04:25

Oracle 10g

2009-03-24 08:27:02

AndroidGoogle移動os

2017-01-05 16:19:12

C++正則表達式

2023-10-28 16:25:17

濾波C++

2009-08-06 11:00:19

C#對象的使用

2024-05-27 16:27:22

2010-07-23 13:07:39

Perl
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久国产精品一区三寸 | 国产91在线 | 中日 | 欧美精品福利视频 | 超碰在线97国产 | 午夜精品一区二区三区在线 | 久久久综合精品 | 亚洲一区二区在线播放 | 色就干| 久草免费在线视频 | 2019中文字幕视频 | 成人免费区一区二区三区 | 亚洲乱码一区二区三区在线观看 | 欧美日韩精品国产 | 亚洲欧美日韩精品久久亚洲区 | 日韩一区二区三区视频在线观看 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 久热久草| 成人久久久 | 999久久| 天堂中文av| 二区在线观看 | 日本韩国欧美在线观看 | 亚洲区视频| 国产欧美一区二区三区国产幕精品 | 蜜臀网站| 麻豆视频在线免费观看 | 日韩一区二区成人 | 自拍偷拍第一页 | 玖玖视频免费 | 久久精品国产一区二区三区 | 日韩福利| 天堂av中文在线 | 国产精品99精品久久免费 | 不卡一区 | 日本欧美视频 | 国产精品久久久久久影院8一贰佰 | 久久久欧洲 | 亚洲自拍一区在线观看 | 日韩av手机在线观看 | 99久久久久国产精品免费 | 国产日韩精品视频 |