重載overload
函數名相同,但形參的個數或形參的類型不同。
僅返回值不同,不能定義為重載函數。
class Base { public: void baseFun( int ) { cout << " baseFun(int) in Base " << endl; } void baseFun( double ) { cout << " baseFun(float) in Base " << endl; } };
?
覆蓋Override
派生類對基類virtual函數的重寫(原型一樣)。
class Base { public: virtual void baseVirtualFun( int ) { cout << " baseVirtualFun(float) in Base " << endl; } }; class Derived: public Base { public: virtual void baseVirtualFun( int ) { cout << " baseFun(float) in Derived " << endl; } };
?
隱藏(另一個新的函數)
兩種情況:
1) 如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。
2) 如果派生類的函數與基類的函數同名,并且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)。
class Base { public: virtual void baseVirtualFun( int ) { cout << " baseVirtualFun(float) in Base " << endl; } }; class Derived: public Base { public: virtual void baseVirtualFun( float ) { cout << " baseFun(float) in Derived " << endl; } };
?
?
總結:重載是同一作用域,覆蓋是派生類對基類virtual方法的重寫,隱藏是兩個類之間(可用using 引用)。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
