C++基礎學習:深入理解類中的構造函數、析構函數、this指針與new關鍵字

前言

在C++面向對象編程中,類是構建復雜程序的基本單元。今天,我們將深入探討類中的幾個核心概念:構造函數、析構函數、this指針以及new關鍵字。這些概念對于理解C++對象生命周期和內存管理至關重要。

1. 構造函數

構造函數是類的一個特殊成員函數,用于在創建對象時初始化對象的狀態。每當一個類的對象被創建時,構造函數會被自動調用。構造函數沒有返回類型,并且其名稱與類名相同。

示例

class Car {
public:Car(int speed, std::string color) {this->speed = speed;this->color = color;}private:int speed;std::string color;
};int main() {Car myCar(120, "Red"); // 創建Car對象時調用構造函數return 0;
}

在這個例子中,Car類的構造函數接受兩個參數:speedcolor,用于初始化對象的屬性。

2. 析構函數

與構造函數相對應,析構函數是類的一個特殊成員函數,用于在對象生命周期結束時執行清理操作。析構函數沒有返回類型,也沒有參數,其名稱與類名相同,但在前面加上波浪號(~)。析構函數在對象銷毀時自動調用,比如對象超出作用域或被顯式刪除時。

示例

class Car {
public:Car(int speed, std::string color) {this->speed = speed;this->color = color;}~Car() {std::cout << "Car object destroyed." << std::endl;}private:int speed;std::string color;
};int main() {{Car myCar(120, "Red"); // 創建Car對象} // myCar對象超出作用域,析構函數被調用return 0;
}

在這個例子中,當myCar對象超出其作用域時,析構函數被自動調用,輸出一條消息。

3. this指針

this指針是一個隱式傳遞給每個非靜態成員函數的指針,它指向調用該函數的對象。this指針在類內部用于訪問對象的成員變量和成員函數,特別是在成員變量名與函數參數名相同時非常有用。

示例

class Car {
public:Car(int speed, std::string color) {this->speed = speed; // 使用this指針區分成員變量和參數this->color = color;}void display() {std::cout << "Speed: " << this->speed << ", Color: " << this->color << std::endl;}private:int speed;std::string color;
};int main() {Car myCar(120, "Red");myCar.display(); // 輸出: Speed: 120, Color: Redreturn 0;
}

在這個例子中,this指針用于在構造函數和display方法中區分成員變量和函數參數。

4. new關鍵字

new關鍵字用于在堆上動態分配內存,并返回指向該內存的指針。與棧上分配的內存不同,堆上分配的內存需要顯式釋放,以避免內存泄漏。new通常與delete關鍵字配對使用,delete用于釋放由new分配的內存。

示例

class Car {
public:Car(int speed, std::string color) {this->speed = speed;this->color = color;}~Car() {std::cout << "Car object destroyed." << std::endl;}void display() {std::cout << "Speed: " << this->speed << ", Color: " << this->color << std::endl;}private:int speed;std::string color;
};int main() {Car* myCar = new Car(120, "Red"); // 在堆上分配Car對象myCar->display(); // 輸出: Speed: 120, Color: Reddelete myCar; // 釋放內存,調用析構函數return 0;
}

在這個例子中,new關鍵字用于在堆上分配一個Car對象,并返回指向該對象的指針。使用delete關鍵字釋放內存時,析構函數被自動調用。

總結

構造函數、析構函數、this指針和new關鍵字是C++面向對象編程中的核心概念。構造函數用于初始化對象,析構函數用于清理對象,this指針用于在類內部訪問對象成員,而new關鍵字用于在堆上動態分配內存。理解這些概念對于編寫高效、可靠的C++程序至關重要。

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

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

相關文章

2025 高考游記/總結

坐標GD 新課標一卷選手 前言 思緒有點亂&#xff0c;想想從哪里說起 沒想到這個博客已經三年沒發過東西了&#xff0c;上次發還是初三準備特長生的時候&#xff0c;一瞬間就已經高考結束了&#xff0c;有種不真實感 對于高中的三年&#xff0c;有很多話、很多感悟想說&#xff…

Python基礎之函數(1/3)

函數(基礎) [函數后續還會更新兩次] 一.認識函數的作用 函數就是將一段具有獨立功能的代碼塊整合到一個整體并命名&#xff0c;在需要的位置&#xff0c;調用這個名稱即可完成對應的需求 函數在開發過程中&#xff0c;可以更高效的實現代碼重用 二.函數的使用步驟 1定義函…

AWS CloudFormation實戰:構建可復用的ECS服務部署模板

一、前言 在云原生時代,基礎設施即代碼(IaC)已成為DevOps實踐的核心組件。AWS CloudFormation作為AWS原生的IaC服務,允許開發人員和系統管理員以聲明式方式定義和部署AWS資源。本文將深入探討如何構建一個通用的CloudFormation模板,用于在AWS ECS(Elastic Container Servic…

GRUB2 啟動配置的工作原理與優先級規則詳解

一、核心組件概述 /boot/loader/entries/ 類型:目錄,存儲 BLS (Boot Loader Specification) 格式的啟動項配置文件(如 20-custom-kernel-5.14.0.conf)。管理工具:由 grubby、kernel-install 等工具自動生成或修改。配置內容:每個文件定義一個啟動項的詳細參數(內核路徑、…

網頁版便簽應用開發:HTML5本地存儲與拖拽交互實踐

文章目錄 摘要成品顯示核心功能與實現語法1. 本地存儲管理2. 拖拽功能實現3. 自動保存機制4. 時間格式化處理 完整代碼 摘要 本文詳細介紹了一個基于HTML5的便簽應用開發過程&#xff0c;重點講解了如何利用localStorage實現數據持久化存儲&#xff0c;以及如何實現流暢的拖拽…

docker compose安裝Prometheus、Grafana

1、創建目錄結構 mkdir -p /opt/monitoring/{prometheus,grafana} mkdir -p /opt/monitoring/prometheus/{config,data} chmod -R 777 /opt/monitoring # 確保容器有寫入權限 2、準備 Prometheus 配置文件 vi /opt/monitoring/prometheus/config/prometheus.yml global:sc…

稀土化合物在生態環境的應用

稀土化合物憑借強吸附性、催化活性及環境兼容性&#xff0c;已成為生態治理的關鍵材料。氧化物、氯化物、磷酸鹽等基礎產品&#xff0c;通過靈活復配與工藝適配&#xff0c;可高效解決水體凈化、土壤修復、廢氣處理三大核心問題&#xff0c;推動環境治理向低耗高效轉型。那么&a…

搭建網站應該怎樣選擇服務器?

互聯網技術已經全面在各個地區進行發展&#xff0c;越來越多的企業選擇線上業務&#xff0c;搭建屬于自己的網站運營&#xff0c;以此來增加品牌的知名度并進行詳細介紹&#xff0c;但是企業在進行搭建網站的前提&#xff0c;要選擇一種合適的服務器&#xff0c;確保后續網站能…

每日算法刷題Day30 6.13:leetcode二分答案2道題,用時1h10min

5. 1201.丑數III(中等) 1201. 丑數 III - 力扣&#xff08;LeetCode&#xff09; 思想 1.丑數是可以被 a 或 b 或 c 整除的 正整數 。 給你四個整數&#xff1a;n 、a 、b 、c &#xff0c;請你設計一個算法來找出第 n 個丑數。 2.此題是4. 878.第N個神奇數字的進階版&#…

Appium+python自動化(二十一)- Monkey指令操作手機

第一式 - 隱藏命令 monkey隱藏的兩個命令&#xff1a; –pck-blacklist-file<黑名單文件><br><br>–pck-whitelist-file<白名單文件> monkey還有一個隱藏的命令那就是&#xff1a; –f<腳本文件>:可以指定monkey的自定義腳本 一般monkey測試…

微信小程序動態效果實戰指南:從懸浮云朵到絲滑列表加載

小紅書爆款交互設計解析&#xff0c;附完整代碼&#xff01; &#x1f525; 一、為什么動態效果是小程序的關鍵競爭力&#xff1f; 用戶留存提升&#xff1a;數據顯示&#xff0c;86.3%的微商從業者依賴微信小程序&#xff0c;而動態效果能顯著降低跳出率。技術賦能體驗&#…

【機器學習】SAE(Sparse Autoencoders)稀疏自編碼器

SAE(Sparse Autoencoders)稀疏自編碼器 0.引言 大模型一直被視為一個“黑箱”&#xff0c;研究人員對其內部神經元如何相互作用以實現功能的機制尚不清楚。因此研究機理可解釋性&#xff08;Mechanistic Interpretability&#xff09;就成為了一個熱門研究方向。大模型的復雜…

抖音授權登錄-獲取用戶授權調用憑證

實現微信小程序獲取抖音授權,使用Java實現抖音授權登錄,您需要使用抖音開放平臺提供的API 第一步 :抖音獲取授權碼 前提條件 ?需要去官網為應用申請 scope 的使用權限。?需要在本接口的 scope 傳參中填上需要用戶授權的 scope,多個 scope 以逗號分割。?用戶授權通過后…

普通人怎樣用好Deepseek?

今年4月份左右&#xff08;2025年&#xff09;&#xff0c;我在上班路上開車&#xff0c;一邊聽著「黑客與畫家」的播客&#xff0c;一邊想著字節的Trae為啥能夠遠程編程&#xff0c;而我的poclogsender[1] [2]卻只能在本地打日志&#xff0c;3天之后&#xff0c;借助deepseek我…

Python ROS2【機器人中間件框架】 簡介

銷量過萬TEEIS德國護膝夏天用薄款 優惠券冠生園 百花蜂蜜428g 擠壓瓶純蜂蜜巨奇嚴選 鞋子除臭劑360ml 多芬身體磨砂膏280g健70%-75%酒精消毒棉片濕巾1418cm 80片/袋3袋大包清潔食品用消毒 優惠券AIMORNY52朵紅玫瑰永生香皂花同城配送非鮮花七夕情人節生日禮物送女友 熱賣妙潔棉…

織夢dedecms {dede:sql} LIKE模糊查詢問題 多出‘號

我們在用到dede:sql這個標簽時候&#xff0c;查詢語句中 LIKE %~title~%&#xff0c;~title~這個like后會出現單引號&#xff0c;造成查詢出錯或者沒有結果&#xff0c;下面就需要修改一下sql.lib.php這個文件&#xff0c;我們需要把自動為語句添加單引號去掉。 找到/include/…

Cursor-1.0安裝Jupyter-Notebook,可視化運行.ipynb文件中Python分片代碼

Cursor 1.0是AI代碼編輯器的里程碑的最新版本。 Cursor - AI 代碼編輯器 Cursor - The AI Code Editor 下載 Cursor 我使用的Cursor版本信息 Version: 1.0.0 (Universal) VSCode Version: 1.96.2 Commit: 53b99ce608cba35127ae3a050c1738a959750860 Date: 2025-06-04T19:21:39.…

SQL進階之旅 Day 28:跨庫操作與ETL技術

【SQL進階之旅 Day 28】跨庫操作與ETL技術 文章簡述 在現代數據驅動的業務場景中&#xff0c;數據往往分布在多個數據庫系統中&#xff0c;如MySQL、PostgreSQL、Oracle等。如何高效地進行跨庫操作和**數據集成&#xff08;ETL&#xff09;**成為數據工程師和數據庫開發人員必…

Flutter之GetX框架的使用

文章目錄 前言GetX使用建議狀態管理GetX快速上手GetX基本功能介紹**核心作用****代碼示例****關鍵細節****性能建議** 參考鏈接 前言 在Reddit上&#xff0c;詬病GetX的聲音很多&#xff0c;主要是說它做的事情太多&#xff0c;不是單一功能組件&#xff0c;違反單一職責原則。…

Kettle數據抽取(二)

一、腳本運用 從本地ORACLE11 數據庫 抽取數據到 華為MYSQL8.1 數據庫 抽取前先刪除MYSQL8.1 數據庫中emp_dept_salgrade表原有數據,避免重復 二、插入表更新 事實上前面一種方法不是增量處理,因為是全部刪除合部重新寫入相當于初始化一樣,這種情形,如果數據量較大,如有1…