日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

C++中的顯式虛函數重載:override與final詳解

來源: 責編: 時間:2024-04-15 18:11:20 191觀看
導讀一、引言在C++中,多態性是面向對象編程的三大特性之一,而虛函數是實現多態的重要手段。隨著C++11標準的推出,C++引入了override和final兩個關鍵字,它們為虛函數的重載和繼承提供了更明確的語義和控制。本文將深入探討這兩

一、引言

在C++中,多態性是面向對象編程的三大特性之一,而虛函數是實現多態的重要手段。隨著C++11標準的推出,C++引入了override和final兩個關鍵字,它們為虛函數的重載和繼承提供了更明確的語義和控制。本文將深入探討這兩個關鍵字的用法和意義。WIF28資訊網——每日最新資訊28at.com

WIF28資訊網——每日最新資訊28at.com

二、虛函數與多態性

在C++中,虛函數(virtual function)允許子類重寫父類中的函數,從而實現多態性。多態性意味著可以使用父類指針或引用來調用子類對象中重寫的函數。這是通過動態綁定(dynamic binding)實現的,即在運行時確定調用哪個類的函數。WIF28資訊網——每日最新資訊28at.com

class Base {public:    virtual void func() { // 虛函數        std::cout << "Base::func()" << std::endl;    }};class Derived : public Base {public:    void func() override { // 重載虛函數        std::cout << "Derived::func()" << std::endl;    }};

在這個例子中,Base類定義了一個虛函數func(),而Derived類重寫了這個函數。當我們通過Base類的指針或引用來調用func()時,將調用相應對象實際類型的func()函數,這就是多態性的體現。WIF28資訊網——每日最新資訊28at.com

三、override關鍵字

在C++11之前,如果子類想要重載父類的虛函數,編譯器并不會提供太多的幫助來確保重載的正確性。有時可能因為參數列表或返回類型的微小差異而導致重載失敗,但編譯器可能并不會給出明確的錯誤信息。WIF28資訊網——每日最新資訊28at.com

C++11引入了override關鍵字,它顯式地告訴編譯器:這個函數是重載父類的虛函數。如果該函數沒有正確重載父類的虛函數(例如參數列表或返回類型不匹配),編譯器將給出錯誤信息。這大大提高了代碼的可讀性和健壯性。WIF28資訊網——每日最新資訊28at.com

class Derived : public Base {public:    void func() override { // 使用override關鍵字        std::cout << "Derived::func()" << std::endl;    }};

在這個例子中,如果Derived::func()的簽名與Base::func()不匹配,或者Base::func()不是虛函數,編譯器將給出錯誤提示。WIF28資訊網——每日最新資訊28at.com

四、final關鍵字

final關鍵字在C++中有兩種用法:一是修飾類,表示該類不能被繼承;二是修飾虛函數,表示該函數不能被重寫。WIF28資訊網——每日最新資訊28at.com

1.修飾類:當一個類被聲明為final時,它不能被其他類繼承。這有助于確保類的設計不被意外破壞或誤用。WIF28資訊網——每日最新資訊28at.com

class MyFinalClass final { // 使用final關鍵字修飾類    // ...};// 下面的代碼將導致編譯錯誤,因為MyFinalClass不能被繼承// class DerivedFromFinal : public MyFinalClass { };

2.修飾虛函數:當一個虛函數被聲明為final時,它不能在派生類中被重寫。這有助于確保某個特定的實現不被修改。WIF28資訊網——每日最新資訊28at.com

class Base {public:    virtual void func() {        std::cout << "Base::func()" << std::endl;    }};class Derived : public Base {public:    void func() final { // 使用final關鍵字修飾虛函數        std::cout << "Derived::func()" << std::endl;    }};// 下面的代碼將導致編譯錯誤,因為Derived::func()已經被聲明為final,不能被重寫// class Derived2 : public Derived {// public://     void func() override { } // 嘗試重寫final函數,將導致編譯錯誤// };

五、結論

C++11引入的override和final關鍵字為虛函數的重載和類的繼承提供了更強大的控制。override確保了我們正確地重寫了父類的虛函數,而final則防止了不必要的繼承和重寫。這兩個關鍵字不僅提高了代碼的可讀性和可維護性,還增強了程序的健壯性。在實際編程中,合理使用這些關鍵字可以使我們的代碼更加清晰、準確和高效。WIF28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-83617-0.htmlC++中的顯式虛函數重載:override與final詳解

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 揭秘Python中的JSON數據格式與Requests模塊

下一篇: 從 React 新官網學到的一個優秀實踐妙招

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • 官方承諾:K60至尊版將會首批升級MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版將會搭載天璣9200+處理器和獨顯芯片X7的同時,Redmi給出了官方承諾,K60至尊重大更新首批升級,會首批推送MIUI 15。也就是說雖然
  • 紅魔電競平板評測:大屏幕硬實力

    前言:三年的疫情因為要上網課的原因激活了平板市場,如今網課的時代已經過去,大家的生活都恢復到了正軌,這也就意味著,真正考驗平板電腦生存的環境來了。也就是面對著這種殘酷的
  • 石頭智能洗地機A10 Plus體驗:雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機A10 Plus。從這個產品名上就不難看出,這次石頭推出的并不是常見的掃地機器
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
  • 8月見!小米MIX Fold 3獲得3C認證:支持67W快充

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
Top 主站蜘蛛池模板: 五莲县| 镇平县| 梁河县| 察雅县| 肥西县| 泰宁县| 松桃| 芒康县| 田阳县| 昔阳县| 荣昌县| 怀安县| 贡嘎县| 陕西省| 观塘区| 济阳县| 广东省| 灵台县| 兴城市| 浮山县| 霍邱县| 海盐县| 瑞昌市| 桦南县| 醴陵市| 万年县| 长沙县| 齐齐哈尔市| 安阳县| 淮南市| 陵水| 营山县| 潍坊市| 木里| 扶沟县| 浑源县| 和平县| 扶风县| 中阳县| 林口县| 荆门市|