C++類_虛基類

在 C++ 里,虛基類是用來解決菱形繼承問題的。菱形繼承問題是指當一個派生類從兩個或更多基類派生,而這些基類又從同一個基類派生時,派生類會包含多份間接基類的數據副本,這可能會引發數據冗余和二義性問題。虛基類可以保證在派生類中只存在一份間接基類的數據副本。

下面是一個 C++11 中使用虛基類的例子:

#include <iostream>// 基類
class Animal {
public:Animal() {std::cout << "Animal constructor" << std::endl;}void eat() {std::cout << "Animal is eating" << std::endl;}
};// 中間派生類,使用虛繼承
class Mammal : virtual public Animal {
public:Mammal() {std::cout << "Mammal constructor" << std::endl;}
};// 中間派生類,使用虛繼承
class Bird : virtual public Animal {
public:Bird() {std::cout << "Bird constructor" << std::endl;}
};// 最終派生類,繼承自 Mammal 和 Bird
class Bat : public Mammal, public Bird {
public:Bat() {std::cout << "Bat constructor" << std::endl;}
};int main() {Bat bat;bat.eat();return 0;
}

代碼解釋:

  1. Animal?類:這是最基礎的類,有一個構造函數和?eat?方法。
  2. Mammal?類和?Bird?類:它們都虛繼承自?Animal?類,這意味著在后續的派生類中,Animal?類的數據成員和成員函數只會有一份副本。
  3. Bat?類:它從?Mammal?類和?Bird?類派生。由于?Mammal?和?Bird?是虛繼承?Animal,所以?Bat?類中只有一份?Animal?類的數據副本。
  4. main?函數:創建一個?Bat?對象并調用?eat?方法。因為?Bat?類中只有一份?Animal?類的數據副本,所以調用?eat?方法時不會產生二義性。

? ? ?運行這個程序,你會看到?Animal?類的構造函數只被調用了一次,這就表明在?Bat?類中只有一份?Animal?類的數據副本。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904129.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904129.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904129.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詳細案例,集成算法

以下是一個使用 隨機森林&#xff08;RF&#xff09; 和 XGBoost 解決結構化數據分類問題的完整案例&#xff08;以泰坦尼克號生存預測為例&#xff09;&#xff0c;包含數據處理、建模和結果分析&#xff1a; 案例&#xff1a;泰坦尼克號乘客生存預測 目標&#xff1a;根據乘客…

《C#數據結構與算法》—201線性表

線性表的實現方式 順序表 線性表的順序存儲是指在內存中用一塊地址連續的空間依次存放線性表的數據元素&#xff0c;用這種方式存儲的線性表叫順序表。 特點&#xff1a;表中相鄰的數據元素在內存中存儲位置也相鄰。 順序表接口實現&#xff1a; 方法名參數返回值描述GetLen…

深入解析C++11委托構造函數:消除冗余初始化的利器

一、傳統構造函數的痛點 在C11之前&#xff0c;當多個構造函數需要執行相同的初始化邏輯時&#xff0c;開發者往往面臨兩難選擇&#xff1a; class DataProcessor {std::string dataPath;bool verbose;int bufferSize; public:// 基礎版本DataProcessor(const std::string&am…

LeetCode 熱題 100 189. 輪轉數組

LeetCode 熱題 100 | 189. 輪轉數組 大家好&#xff0c;今天我們來解決一道經典的算法題——輪轉數組。這道題在LeetCode上被標記為中等難度&#xff0c;要求我們將數組中的元素向右輪轉 k 個位置。下面我將詳細講解解題思路&#xff0c;并附上Python代碼實現。 問題描述 給定…

GAEA商業前景和生態系統擴展

GAEA情感坐標系不僅增強了AI對人類情感的理解&#xff0c;也為Web3生態注入了新的活力。通過去中心化的數據存儲和共享&#xff0c;GAEA構建了一個開放透明的數據市場&#xff0c;為AI訓練提供了優質的數據源。同時&#xff0c;貢獻數據的用戶將獲得靈魂積分&#xff08;SOUL P…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: [2]如何使用跨平臺消息框?

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…

js逆向繞過指紋識別

??一、兼容性說明?? 官方支持 curl_cffi 明確支持 Windows 平臺&#xff0c;并提供了預編譯的安裝包。其核心功能&#xff08;如瀏覽器指紋模擬、HTTP/2 支持&#xff09;在 Windows 上與 Linux/macOS 表現一致。 版本要求 ? Python 3.8 及以上版本&#xff08;推薦 Pyth…

聊聊對Mysql的理解

目錄 1、Sql介紹 1.1、SQL的分類 1.2、數據庫的三大范式 1.3、數據表的約束 1.4、約束的添加與刪除 2、核心特性 3、主要組件 4、數據結構原理 5、索引失效 6、常用問題 7、優勢與局限 前言 MySQL是一個開源的關系型數據庫管理系統(RDBMS)&#xff0c;由瑞典MySQL A…

[HOT 100] 1617. 統計子樹中城市之間最大距離

文章目錄 1. 題目鏈接2. 題目描述3. 題目示例4. 解題思路5. 題解代碼6. 復雜度分析 1. 題目鏈接 1617. 統計子樹中城市之間最大距離 - 力扣&#xff08;LeetCode&#xff09; 2. 題目描述 給你 n 個城市&#xff0c;編號為從 1 到 n 。同時給你一個大小為 n-1 的數組 edges &…

接口自動化——參數化

之前有說過&#xff0c;通過pytest測試框架標記參數化功能可以實現數據驅動測試。數據驅動測試使用的文件主要有以下類型&#xff1a; txt 文件 csv 文件excel 文件json 文件yaml 文件.... 本文主要講的就是以上幾種文件類型的讀取和使用 一.txt 文件讀取使用 首先創建一個 …

游戲引擎學習第257天:處理一些 Win32 相關的問題

設定今天的工作計劃 今天我們本來是打算繼續開發性能分析器&#xff08;Profiler&#xff09;&#xff0c;但在此之前&#xff0c;我們認為有一些問題應該先清理一下。雖然這類事情不是我們最關心的核心內容&#xff0c;但我們覺得現在是時候處理一下了&#xff0c;特別是為了…

實驗三 觸發器及基本時序電路

1.觸發器的分類&#xff1f;各自的特點是什么&#xff1f; 1 、 D 觸發器 特點&#xff1a;只有一個數據輸入端 D &#xff0c;在時鐘脈沖的觸發沿&#xff0c;輸出 Q 的狀態跟隨輸入端 D 的 狀態變化&#xff0c;即 &#xff0c;功能直觀&#xff0c;利于理解和感受…

硬件加速模式Chrome(Edge)閃屏

Chrome開啟“硬件加速模式”后&#xff0c;打開瀏覽器會閃屏或看視頻會閃屏&#xff0c;如果電腦只有集顯&#xff0c;直接將這個硬件加速關了吧&#xff0c;沒啥必要開著 解決方法 讓瀏覽器使用獨立顯卡 在Windows左下角搜索 圖形設置 &#xff0c;將瀏覽器添加進去&#…

前端工程化利器:Node.js 文件匹配庫 fast-glob 完全指南——比傳統方案快 350% 的「文件搜索神器」

為什么需要 fast-glob&#xff1f; 在前端工程化場景中&#xff0c;文件匹配是高頻操作&#xff1a;自動化構建、資源打包、靜態資源管理等都依賴高效的路徑匹配。傳統的 node-glob 雖然功能齊全&#xff0c;但性能瓶頸明顯。fast-glob 應運而生——它以 極簡 API 和 超高性能…

React class 的組件庫與函數組件適配集成

如果你有一個 基于 React class 的組件庫&#xff0c;現在需要在 React hooks 函數組件中使用&#xff0c;你可以通過以下幾種方式實現適配和集成&#xff1a; 數據生命周期確保 class 組件使用 React.forwardRef 導出&#xff08;或手動綁定 ref&#xff09; ? 1. 直接使用 c…

Sway初體驗

Sway&#xff08;縮寫自 SirCmpwn’s Wayland compositor[1]&#xff09;是一款專為 Wayland 設計的合成器&#xff0c;旨在與 i3 完全兼容。根據官網所述&#xff1a; Sway 是 Wayland 的合成器&#xff0c;也是 x11 的 i3 窗口管理器的替代品。它可以根據您現有的 i3 配置工作…

dubbo 參數校驗-ValidationFilter

org.apache.dubbo.rpc.Filter 核心功能 攔截RPC調用流程 Filter是Dubbo框架中實現攔截邏輯的核心接口&#xff0c;作用于服務消費者和提供者的作業鏈路&#xff0c;支持在方法調用前后插入自定義邏輯。如參數校驗、異常處理、日志記錄等。擴展性機制 Dubbo通過SPI擴展機制動態…

Lesson 16 A polite request

Lesson 16 A polite request 詞匯 park n. 公園&#xff0c;停車場&#xff0c;莊園 v. 停車&#xff0c;泊車 例句&#xff1a;讓我來停車。    Let me park. 相關&#xff1a;spot n. 車位 區別&#xff1a;garden n. 花園 [小&#xff0c;私家的] 例句&#xff1a;我們…

解決 Builroot 系統編譯 perl 編譯報錯問題

本文提供一種修復 Builroot 系統編譯 perl 編譯報錯途徑 2025-05-04T22:45:08 rm -f pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/ln -s perldelta.pod pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/gcc -c -DPERL_CORE -fwrapv -fpcc-struct-return -pipe -f…

Spring MVC 中解決中文亂碼問題

在 Spring MVC 中解決中文亂碼問題&#xff0c;需要從 請求參數編碼 和 響應內容編碼 兩方面入手。以下是完整的解決方案&#xff1a; 一、解決請求參數中文亂碼 1. POST 請求編碼&#xff08;表單提交&#xff09; 配置 CharacterEncodingFilter 在 web.xml 中添加 Spring 提…