類對象作為類成員

在C++中,類對象可以作為另一個類的成員變量。這種設計方式可以用于創建復雜的對象結構,使得一個類的對象能夠包含另一個類的對象。這種嵌套類的組合方式可以增強代碼的可重用性和模塊化。

類對象作為類成員的示例

讓我們通過一個示例來解釋這一概念。假設我們有兩個類 EngineCar,其中 Engine 類表示汽車引擎,而 Car 類表示汽車,并且每輛汽車都有一個引擎。

定義Engine類:

#include <iostream>
using namespace std;class Engine {
public:Engine(int horsepower) : horsepower(horsepower) {cout << "Engine with " << horsepower << " HP constructed." << endl;}~Engine() {cout << "Engine destructed." << endl;}void start() {cout << "Engine started." << endl;}private:int horsepower;
};

定義Car類

#include <iostream>
using namespace std;class Car {
public:Car(int horsepower) : engine(horsepower) {cout << "Car constructed." << endl;}~Car() {cout << "Car destructed." << endl;}void start() {engine.start();cout << "Car started." << endl;}private:Engine engine;  // `Engine` 對象作為 `Car` 類的成員
};

使用Car和Engine類:

int main() {Car myCar(300);myCar.start();return 0;
}

解釋:

類對象作為成員變量

  • Car 類中,Engine 對象被聲明為成員變量 engine。這意味著每個 Car 對象都包含一個 Engine 對象。
  • Engine engine;Car 類中的一個成員變量,它將在 Car 對象構造時被自動構造。

構造函數和析構函數

  • Car 類的構造函數中,engine(horsepower) 語法用于初始化 Engine 對象。這樣可以在 Car 對象構造時傳遞參數給 Engine 對象的構造函數。
  • Car 對象被銷毀時,包含的 Engine 對象也會被自動銷毀。

成員函數的調用

  • Car 類中的 start 成員函數調用了 Engine 類中的 start 成員函數。這展示了如何通過嵌套對象調用其成員函數。

輸出結果:

Engine with 300 HP constructed.
Car constructed.
Engine started.
Car started.
Car destructed.
Engine destructed.

總結

  • 當類對象作為另一個類的成員時,嵌套對象會隨著包含它的對象一起構造和析構。
  • 在包含類的構造函數中,可以通過初始化列表來初始化嵌套對象。
  • 這種設計方式可以用來創建更復雜的對象結構,促進代碼的可重用性和模塊化,增強代碼的組織和管理能力。

通過這種方式,我們可以有效地組織和管理復雜系統中的對象和數據,利用類之間的組合關系來實現更高效的代碼設計。

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

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

相關文章

武漢信息系統建設和服務能力評估CS認證咨詢

很多企業在咨詢信息系統建設和服務能力評估的時候喜歡百度搜索&#xff0c;不管是本地咨詢機構還是外地咨詢機構只要價格便宜就找誰&#xff0c;這個在低等級的CS1是可以這么操作的&#xff0c;一旦上升到CS2級別及以上的&#xff0c;我們一般不推薦找外地咨詢機構&#xff0c;…

【文末附gpt升級方案】字節跳動發布豆包大模型:AI領域的革新與引領

隨著科技的飛速進步&#xff0c;人工智能&#xff08;AI&#xff09;已逐漸成為推動社會發展的重要力量。在這一背景下&#xff0c;字節跳動公司以其前瞻性的眼光和創新能力&#xff0c;于XXXX年XX月XX日正式發布了豆包大模型&#xff0c;這一舉動無疑在AI領域掀起了新一輪的浪…

C語言.動態內存管理

動態內存管理 1.為什么要有動態內存分配2.malloc和free2.1malloc2.2free 3.calloc和realloc3.1calloc3.2realloc 4.常見的動態內存管理的錯誤4.1對NULL指針解引用操作4.2對動態開辟空間的越界訪問4.3對非動態開辟內存使用free釋放4.4使用free釋放一塊動態開辟內存的一部分4.5對…

軍訓中的美差

大學時候的軍訓是在二年級秋季開學前進行的&#xff0c;地點是在河北的某部隊。 軍訓時候的分班是按照學號重新劃分的&#xff0c;我的學號在大學宿舍八個人中排最后&#xff0c;恰好就和其他宿舍的人分在了一個班。訓練正步走的時候&#xff0c;站在我左邊的那個哥們&#xf…

Signal 即將成為JavaScript的一部分

什么是響應性&#xff1f; 在過去的幾年中&#xff0c;響應性成為了所有現代前端框架以及React庫的核心。 對于不熟悉前端開發的人來說&#xff0c;起初這可能是一個令人困惑的概念&#xff0c;因為它改變了常規的、自上而下的、從調用者到被調用者的順序工作流。 在響應性范…

AR系列路由器配置VLAN間通信

AR路由器是華為公司推出的企業級路由器產品系列&#xff0c;具有高可靠性、高性能和易管理等特點。AR 系列路由器提供的功能包括路由轉發、安全接入、語音、視頻、無線等多種業務&#xff0c;支持各種接入方式和協議&#xff0c;并且可以方便地進行擴展和升級。 實驗拓撲圖&…

微信小程序介紹

一、微信小程序概述 微信小程序是一種不需要下載、安裝即可使用的應用&#xff0c;用戶只需掃一掃或搜一下即可打開。它實現了應用觸手可及的夢想&#xff0c;降低了應用的使用門檻。微信小程序自2017年1月上線以來&#xff0c;已經吸引了大量開發者加入&#xff0c;構建了一個…

【全開源】云界旅游微信小程序(源碼搭建/上線/運營/售后/維護更新)

開啟您的云端旅行新體驗 一、引言 在快節奏的現代生活中&#xff0c;旅行成為了人們放松身心、探索世界的重要方式。讓您的旅行更加便捷、高效&#xff0c;打造了云界旅游小程序&#xff0c;帶您領略云端旅行的無限魅力。 二、小程序功能概覽 云界旅游小程序集成了豐富的旅游…

【代碼隨想錄算法訓練營第37期 第九天 | LeetCode28. 實現 strStr()、459.重復的子字符串】

代碼隨想錄算法訓練營第37期 第九天 | LeetCode28. 實現 strStr()、459.重復的子字符串 一、28. 實現 strStr() 解題代碼C&#xff1a; class Solution { public:void getNext(int* next, const string& s) {int j 0;next[0] 0;for(int i 1; i < s.size(); i) {whi…

【Maven】Nexus私服簡介_下載安裝_登錄

1、簡介 1.1介紹 Nexus私服&#xff0c;也被稱為Maven倉庫管理器&#xff0c;是許多公司在自己的局域網內搭建的遠程倉庫服務器。提供了強大的倉庫管理功能和構件搜索功能&#xff0c;使得開發人員能夠更方便地管理和使用Maven項目中的依賴庫。 1.2作用 內網訪問&#xff1…

Python代碼:七、小數化整數

1、題目 日常生活中我們會遇到很多小數&#xff0c;但是有的人不喜歡小數&#xff0c;因此會用四舍五入的方式將其去掉。在Python中我們更加簡單&#xff0c;可以利用強制類型轉換將小數轉變成整數&#xff0c;請你試一試。 2、代碼 import sysn float(input()) print(int(…

微服務(Spring Clould)--Nacos的安裝、配置

簡介&#xff1a;&#xff08;取自官網&#xff09; Nacos /nɑ:k??s/ 是 Dynamic Naming and Configuration Service的首字母簡稱&#xff0c;一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。 Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了…

<sa8650>QCX Usecase 使用詳解—什么是可剪枝節點屬性以及何時使用

<sa8650>QCX Usecase 使用詳解—什么是可剪枝節點屬性以及何時使用 用例剪枝可實現光流設計分段(節點和目標緩沖區),這些分段實現了共享的邏輯接口,而這些接口的實現可能會發生沖突,但不會重復流水線。例如,overridesettings.txt 中的 enableAutoNoIPE=FALSE。 在 /qc…

《表格革命:數據可視化的力量與創新》

在當今數字化的時代&#xff0c;表格已不再是簡單的羅列工具&#xff0c;而是一場正在悄然興起的革命&#xff01; 表格&#xff0c;這個看似平凡無奇的存在&#xff0c;卻在各個領域發揮著至關重要的作用。無論是商業數據分析中精準呈現銷售趨勢和市場動態&#xff0c;還是學…

React 第三十七章 Scheduler 最小堆算法

在 Scheduler 中&#xff0c;使用最小堆的數據結構在對任務進行排序。 // 兩個任務隊列 var taskQueue: Array<Task> []; var timerQueue: Array<Task> [];push(timerQueue, newTask); // 像數組中推入一個任務 pop(timerQueue); // 從數組中彈出一個任務 time…

【深入理解MySQL的索引數據結構】

文章目錄 &#x1f4d5;索引底層數據結構與算法&#x1f4d9;索引數據結構&#x1f4d8;二叉樹&#x1f4d8;紅黑樹&#x1f4d8;Hash&#x1f4d8;B-Tree&#x1f4d8;BTree &#x1f4d9;表在不同存儲引擎的存儲結構&#x1f4d8;MyISAM存儲引擎索引實現&#x1f4da;文件結構…

C語言如何創建?個動態鏈表?

一、問題 創建動態鏈表就是指在程序執?過程中&#xff0c;從?到有&#xff0c;按照需求開辟結點和輸?各結點數據&#xff0c;并建?起前后相連接的關系。那么&#xff0c;如何創建動態鏈表呢&#xff1f; 二、解答 以建??個有任意名學?數據的單向動態鏈表為例&#xff0…

使用mysql主從熱備+keepalived服務+ipvsadm工具 實現 mysql高可用主備+負載均衡

目錄 1、工作原理 2、環境準備 3、分別在主服務器和備用服務器上安裝keepalived和ipvsadm 4、修改keepalived服務的配置文件 4.1 修改主服務器上的keepalive服務的配置文件 4.2 修改備用服務器上的keepalive服務配置文件 5、編寫mysql監控腳本放到主服務器上 6、在主服…

echers配置項:X軸,Y軸顏色修改

如上圖綠框所示&#xff0c;修改x&#xff0c;y軸的顏色 let option {xAxis: {axisLine:{lineStyle:{color:red}},},yAxis: {type: value,axisLine:{lineStyle:{color:red}},}, }

學習MySQL(六):Python的連接與操作

安裝第三方模塊pymysql pip install pymysql 或者 通過PyCharm后臺操作 連接mysql # 語法示例 import pymysql db pymysql.connect(hostlocalhost,userroot,password"123456",databaseschool,port3306,charset"utf8") 數據操作的基本語法 import pymys…