C++多重繼承詳解與實戰解析

#include <iostream>
using namespace std;
//基類,父類
class ClassA {
public:void displayA() {std::cout << "Displaying ClassA" << std::endl;}void testFunc(){std::cout << "testFunc ClassA" << std::endl;}
};
class ClassB {
public:void displayB() {std::cout << "Displaying ClassB" << std::endl;}void testFunc(){std::cout << "testFunc ClassB" << std::endl;}
};
class Derived : public ClassA, public ClassB {
public:void display() {displayA(); // 調用 ClassA 的 displayAdisplayB(); // 調用 ClassB 的 displayBClassA :: testFunc();}
};
int main() {Derived obj;obj.displayA(); // 調用 ClassA 的 displayAobj.displayB(); // 調用 ClassB 的 displayBobj.display(); // 調用 Derived 的 displayreturn 0;
}

當然可以!下面是對這段 C++ 多重繼承代碼的逐行詳細注釋解釋,幫助你理解類之間的關系、成員函數調用方式以及多重繼承的基本用法。


🧱 類定義部分

🔹?ClassA:基類 A

class ClassA {
public:void displayA() {std::cout << "Displaying ClassA" << std::endl;}

說明:定義一個公共成員函數 displayA(),用于輸出 "Displaying ClassA"

    void testFunc(){std::cout << "testFunc ClassA" << std::endl;}

說明:另一個公共成員函數 testFunc(),輸出 "testFunc ClassA"

};

說明:類 ClassA 定義結束。


🔹?ClassB:基類 B

class ClassB {
public:void displayB() {std::cout << "Displaying ClassB" << std::endl;}

說明:定義一個公共成員函數 displayB(),輸出 "Displaying ClassB"

    void testFunc(){std::cout << "testFunc ClassB" << std::endl;}

說明:另一個公共成員函數 testFunc(),輸出 "testFunc ClassB"

};

說明:類 ClassB 定義結束。


🔁?Derived:派生類,同時繼承自?ClassA?和?ClassB

class Derived : public ClassA, public ClassB {

說明:定義一個派生類 Derived,它公有地繼承了兩個基類

  • 從?ClassA?公有繼承
  • 從?ClassB?公有繼承
    這就是 C++ 中的多重繼承(Multiple Inheritance)。
public:void display() {displayA(); // 調用 ClassA 的 displayAdisplayB(); // 調用 ClassB 的 displayBClassA::testFunc(); // 顯式調用 ClassA 的 testFunc}
};

說明:定義了一個新的成員函數 display(),它內部做了以下幾件事:

  • 調用了從?ClassA?繼承來的?displayA()
  • 調用了從?ClassB?繼承來的?displayB()
  • 使用作用域解析運算符?ClassA::testFunc(),顯式調用?ClassA?的?testFunc()
    (因為兩個基類都有同名函數,直接調用會歧義)

🚀 主函數部分

int main() {Derived obj;

說明:創建一個 Derived 類的對象 obj

    obj.displayA(); // 調用 ClassA 的 displayA

說明:調用從 ClassA 繼承來的 displayA() 方法,輸出:

 

深色版本

Displaying ClassA
    obj.displayB(); // 調用 ClassB 的 displayB

說明:調用從 ClassB 繼承來的 displayB() 方法,輸出:

 

深色版本

Displaying ClassB
 

cpp

深色版本

    obj.display(); // 調用 Derived 的 display

說明:調用自己的方法 display(),依次調用:

  • displayA()?→ 輸出?"Displaying ClassA"
  • displayB()?→ 輸出?"Displaying ClassB"
  • ClassA::testFunc()?→ 輸出?"testFunc ClassA"
 

cpp

深色版本

    return 0;
}

說明:程序正常結束。


? 總結輸出結果

運行程序后將輸出:

 

深色版本

Displaying ClassA
Displaying ClassB
Displaying ClassA
Displaying ClassB
testFunc ClassA

?? 注意事項:函數名沖突問題

  • ClassA?和?ClassB?都有一個叫?testFunc()?的函數。
  • 如果你在?main()?中寫:
     cpp 

    深色版本

    obj.testFunc();
    編譯器會報錯,因為它不知道你要調用哪一個版本。

? 正確做法是使用作用域解析運算符指定版本:

obj.ClassA::testFunc(); // 調用 ClassA 的版本
obj.ClassB::testFunc(); // 調用 ClassB 的版本

📌 小貼士:多重繼承的優點和注意事項

特性說明
優點可以讓一個類擁有多個父類的功能,提高代碼復用性
缺點容易導致命名沖突、菱形繼承等問題,需要謹慎設計
建議如果只是需要接口功能,推薦使用接口類(抽象類 + 純虛函數)代替多重繼承

如果你還想了解:

  • 如何解決“菱形繼承”問題(使用虛繼承)
  • 如何設計接口類
  • 如何實現多態

歡迎繼續提問,我可以幫你深入學習 😊

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

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

相關文章

單細胞注釋前沿:CASSIA——無參考、可解釋、自動化細胞注釋的大語言模型

細胞類型注釋是單細胞RNA-seq分析的重要步驟&#xff0c;目前有許多注釋方法。大多數注釋方法都需要計算和特定領域專業知識的結合&#xff0c;而且經常產生不一致的結果&#xff0c;難以解釋。大語言模型有可能在減少人工輸入和提高準確性的同時擴大可訪問性&#xff0c;但現有…

STM32Cubemx-H7-17-麥克納姆輪驅動

前言 --末尾右總體的.c和.h 本篇文章把麥克納姆輪的代碼封裝到.c和.h&#xff0c;使用者只需要根據輪子正轉的方向&#xff0c;在.h處修改定義方向引腳&#xff0c;把輪子都統一正向后&#xff0c;后面的輪子驅動就可以正常了&#xff0c;然后直接調用函數驅動即可。 設置滿…

文檔核心結構優化(程序C++...)

文檔核心結構優化 一、文檔核心結構優化二、C關鍵特性詳解框架2.1 從C到C的范式遷移 三、深度代碼解析模板3.1 現代C特性分層解析 四、C vs C 關鍵差異矩陣五、交互式文檔設計策略5.1 三維學習路徑5.2 代碼缺陷互動區 六、現代C特性演進圖七、性能優化可視化呈現&#xff08;深…

PyTorch ——torchvision數據集使用

如果下載的很慢&#xff0c;可以試試下面這個

純前端實現圖片偽3D視差效果

作者&#xff1a;vivo 互聯網前端團隊- Su Ning 本文通過depth-anything獲取圖片的深度圖&#xff0c;同時基于pixi.js&#xff0c;通過著色器編程&#xff0c;實現了通過深度圖驅動的偽3D效果。該方案支持鼠標/手勢與手機陀螺儀雙模式交互&#xff0c;在保證性能的同時&#x…

英語寫作中“專注于”focus on、concentrate的用法

Focus on在論文寫作中常用&#xff0c;指出研究點&#xff0c;例如&#xff1a; There are three approaches to achieving ID authentication. Our study will focus on ……&#xff08;有三種途徑實現身份認證&#xff0c;我們的研究專注于……&#xff09; concentrate &…

go環境配置

下載對應版本的 go 版本 https://go.dev/dl/ 配置 vim ~/.zshrc export GOROOT/usr/local/go export PATH$PATH:$GOROOT/binsource ~/.zshrc >>>>>> go versiongoland 配置&#xff1a; &#x1f50d; 一、什么是GOPATH&#xff1f; GOPATH 是舊的項目結…

AI Agent智能體:底層邏輯、原理與大模型關系深度解析·優雅草卓伊凡

AI Agent智能體&#xff1a;底層邏輯、原理與大模型關系深度解析優雅草卓伊凡 一、AI Agent的底層架構與核心原理 1.1 AI Agent的基本構成要素 AI Agent&#xff08;人工智能代理&#xff09;是一種能夠感知環境、自主決策并執行行動的智能系統。其核心架構包含以下關鍵組件…

【手搓一個原生全局loading組件解決頁面閃爍問題】

頁面閃爍效果1 頁面閃爍效果2 封裝一個全局loading組件 class GlobalLoading extends HTMLElement {constructor() {super();this.attachShadow({ mode: open });}connectedCallback() {this.render();this.init();}render() {this.shadowRoot.innerHTML <style>.load…

unix/linux source 命令,其高級使用

就像在物理學中,掌握了基本定律后,我們可以開始研究更復雜的系統和現象,source 的高級用法也是建立在對其基本行為深刻理解之上的。 讓我們一起探索 source 的高級應用領域: 1. 條件化加載 (Conditional Sourcing) 根據某些條件來決定是否 source 一個文件,或者 source…

DexGarmentLab 論文翻譯

單個 專家 演示 裝扮 15 任務 場景 2500+ 服裝 手套 棒球帽 褲子 圍巾 碗 帽子 上衣 外套 服裝-手部交互 捕捉 搖籃 夾緊 平滑 任務 ...... 投擲 懸掛 折疊 ... 多樣化位置 ... 多樣化 變形 ... 多樣化服裝形狀 類別級 一般化 類別級(有或沒有變形) 服裝具有相同結構 變形 生…

WPF-Prism學習筆記之 “導航功能和依賴注入“

新建空白模板(Prism) 新建好后會有自動創建ViewModels和Views 在"MainWindow.xaml"文件里面標題去綁定了一個屬性"Title"&#xff0c;而"MainWindowViewModel.cs"里面繼承一個非常重要的"BindbleBase"(prism框架里面非常重要的)。所以…

《C++初階之入門基礎》【C++的前世今生】

【C的前世今生】目錄 前言&#xff1a;---------------起源---------------一、歷史背景二、橫空出世---------------發展---------------三、標準立世C98&#xff1a;首個國際標準版本C03&#xff1a;小修訂版本 四、現代進化C11&#xff1a;現代C的開端C14&#xff1a;對C11的…

YOLOv5-入門篇筆記

1.創建環境 conda create -n yolvo5 python3.8 去pytorch.org下載1.8.2的版本。 pip --default-timeout1688 install torch1.8.2 torchvision0.9.2 torchaudio0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu111 github上下載yolov5的zip pip --def…

【PostgreSQL 03】PostGIS空間數據深度實戰:從地圖服務到智慧城市

PostGIS空間數據深度實戰&#xff1a;從地圖服務到智慧城市 關鍵詞 PostGIS, 空間數據庫, 地理信息系統, GIS, 空間查詢, 地理分析, 位置服務, 智慧城市, 空間索引, 坐標系統 摘要 PostGIS是PostgreSQL的空間數據擴展&#xff0c;它將普通的關系數據庫轉變為強大的地理信息系統…

科技修真的解決方案

“科技修真”是一個結合現代科技與修真&#xff08;玄幻&#xff09;元素的創新概念&#xff0c;通常出現在科幻或玄幻文學作品中&#xff0c;但也可能指代現實中的科技與傳統文化、超自然理念的融合探索。以下是幾種可能的“科技修真”方案&#xff0c;涵蓋技術實現、文化融合…

STM32的HAL編碼流程總結(上部)

目錄 一、GPIO二、中斷系統三、USART串口通信四、I2C通信五、定時器 一、GPIO 1.選擇調試類型 在SYS中Debug選擇Serial Wire模式 2.選擇時鐘源 在RCC中將HSE和LSH都選擇為內部晶振 3.時鐘樹配置 4.GPIO配置 在芯片圖上選擇開啟的引腳和其功能 配置引腳的各自屬性 5.工…

java直接獲取MyBatis將要執行的動態sql命令(不是攔截器方式)

目錄 前言 一. 準備數據 1. 傳輸過來的json條件數據 2. mybatis 配置的動態sql 3. 想要的最終會執行的sql并返回給頁面展示 二. 實現方式 三. 最終代碼 前言 1.在平常開發過程中,MyBatis使用時非常多的,一般情況下我們只需要在控制臺看看MyBatis輸出的日志,要不就是實…

機器學習算法-決策樹

今天我們用一個 「相親決策」 的例子來講解決策樹算法&#xff0c;保證你輕松理解原理和實現&#xff01; &#x1f333; 決策樹是什么&#xff1f; 決策樹就像玩 「20個問題」猜謎游戲&#xff1a; 你心里想一個東西&#xff08;比如「蘋果」&#xff09; 朋友通過一系列問題…

2025——》VSCode Windows 最新安裝指南/VSCode安裝完成后如何驗證是否成功?2025最新VSCode安裝配置全攻略

1.VSCode Windows 最新安裝指南: 以下是 2025 年 Windows 系統下安裝 Visual Studio Code(VSCode)的最新指南,結合官方文檔與實際操作經驗整理而成: 一、下載官方安裝包: 1.訪問官網: 打開瀏覽器,進入 VSCode 官方下載頁面https://code.visualstudio.com/Download 2…