AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

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

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

一、引言

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

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

二、虛函數與多態性

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

三、override關鍵字

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

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

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

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

四、final關鍵字

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

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

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

2.修飾虛函數:當一個虛函數被聲明為final時,它不能在派生類中被重寫。這有助于確保某個特定的實現不被修改。Zgi28資訊網——每日最新資訊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則防止了不必要的繼承和重寫。這兩個關鍵字不僅提高了代碼的可讀性和可維護性,還增強了程序的健壯性。在實際編程中,合理使用這些關鍵字可以使我們的代碼更加清晰、準確和高效。Zgi28資訊網——每日最新資訊28at.com

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

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

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

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

標簽:
  • 熱門焦點
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發布,本次就這款耳機新品給大家帶來一個簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產
  • iPhone賣不動了!蘋果股價創年內最大日跌幅:市值一夜蒸發萬億元

    8月5日消息,今天凌晨美股三大指數高開低走集體收跌,道指跌0.41%;納指跌0.36%;標普500指數跌0.52%。熱門科技股也都變化極大,其中蘋果報181.99美元,跌4.8%,創
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式。可以為擁有指定屬性的 HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • 造車兩年股價跌六成,小米的估值邏輯變了嗎?

    如果從小米官宣造車后的首個交易日起持有小米集團的股票,那么截至2023年上半年最后一個交易日,投資者將浮虧59.16%,同區間的恒生科技指數跌幅為52.78%
  • iQOO 11S新品發布會

    iQOO將在7月4日19:00舉行新品發布會,推出杭州亞運會電競賽事官方用機iQOO 11S。
  • 到手價3099元起!iQOO Neo8 Pro今日首銷:安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • 回歸OPPO兩年,一加贏了銷量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創佳績。今年618期間,一加手機全渠道銷量同比增長362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top