C++ 當子類的方法和父類的方法重名時...


C++當子類的成員函數與父類的成員函數重名時:

 

若父類沒有virtual聲明,子類函數可以和父類函數返回值不同,但函數名和參數列表必須相同.

則子類實例通過"."調用的是子類的函數

若子類想調用父類的函數,則需要使用 子類實例.父類::函數名() 的形式.

父類實例通過"."調用的是父類的函數

父類無法調用子類的同名函數

 

若通過指針->調用

則指針的類型 決定 調用哪個類的函數

父類地址強制轉換為子類指針 也可以調用子類的函數.

 


 

若父類有virtual聲明,

虛函數就固定了函數的形式,所以子類函數和父類函數的返回類型也必須一致,否則報error: conflicting return type specified for ‘virtual int CDerive::show()’

 

則通過"."調用時,

子類實例調用子類函數,父類實例調用父類函數.

 

若通過"->"調用時,

則多態性成立,即當使用基類指針通過->調用時,根據指針的內容確實是基類地址還是子類地址,分別調用對應的函數.子類地址賦給父類指針,默認調用的是子類的函數,但可以通過 父類指針->父類::函數名()  明確調用父類的函數.

 

當用子類指針通過->調用時,將父類地址強制轉換為子類指針,則默認調用的仍然是其本質的函數 即 父類的函數 可以通過 子類指針->子類名::函數名() 強制調用子類的函數.

將子類指針指向子類實例地址時,默認調用子類函數,可以通過 子類指針->父類名::函數名() 強制調用父類的函數.

 

當參數不一樣時,則是兩個函數,

此時通過->調用函數 取決於指針變量的類型決定調用哪個函數 而與其實質值無關.

子類類型的指針可以通過 子類指針->父類名::函數名() 強制調用父類函數.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM