c 的繼承關係和函式過載

2021-05-25 13:59:55 字數 611 閱讀 6004

主要關注兩個方面:

1、子類和基類之間變數重名

2、函式重名,但是形參列表不同

第乙個:眾所周知,子類繼承基類的所有變數,那麼如果子類的成員變數和父類的某一變數重名,通過父類的引用或者指標訪問的變數是父類的變數還是子類的呢?寫個程式測之。

結果為 4

這說明,在編譯期間,基類的指標取變數值為基類自己的變數,並在編譯期間確定。如果將a的m_a成員去掉,導致編譯不成功。

第二個,子類如何過載父類的函式。

先看乙個程式:

此時,編譯錯誤,提示error c2668: 'b::print' : ambiguous call to overloaded function。

找不到print的過載函式

原因,由於b.print(20.0);函式的引數是double型別,在子類只有int和float的型別,在編譯的時候如果找到了函式名,將匹配引數列表,匹配不成功,將不會去基類找。只有在子類的函式列表裡找不到print函式名,才會去基類找。因此b.print(20.0)找不到合適的以double為形參的print函式。

一種簡單的辦法是使用using關鍵字,將基類的print函式名引進子類函式列表。

因此,將b類得注釋去掉。即得到正確輸出。

繼承和函式過載的問題

我們先看乙個例子 class base class derived1 public base class derived2 public base class mi public derived1,public derived2 上面的例子,我們定義了類層次結構。當執行下面的語句時將會產生編譯錯誤 ...

函式過載和虛函式繼承

include class cbase void g float x class cberived public cbase void g float x void main 輸出結果 cberived f 函式列印 整數 3 cberived g 函式列印 浮點小數 6.000000 cberiv...

過載函式的繼承

在基類中過載的函式,派生類可以重定義所繼承的0個或多個版本。如果派生類想通過自身型別使用的過載版本,則派生類必須要麼重定義所有過載版本,要麼乙個也不重定義。但有時類需要僅僅重定義乙個過載集中某些版本的行為,並且想繼承其它版本的含義。這時,可以用using宣告講基類所有的過載例項載入到派生類中,派生類...