【學習筆記】構造函數+重載相關

【學習筆記】構造函數+重載相關

一、構造函數

構造函數在創建對象的過程就會執行,帶參數與不帶參數,帶參數的構造函數會默認將成員變量賦值傳進去的參數。

class Layer {
private:int layer_id;       // 層IDstd::string layer_json;  // 層的JSON配置
public:Layer(){ }// 構造函數實現Layer(int layerId, const std::string& layerJson) {layer_id = layerId;      // 初始化層IDlayer_json = layerJson;  // 初始化JSON配置}
};
// 使用帶參數的構造函數創建Layer對象
Layer layer(1, "{\"name\":\"background\",\"opacity\":0.8}");// 等價于先創建對象,再賦值(但更高效)
Layer layer2;
layer2.layer_id = 1;
layer2.layer_json = "{\"name\":\"background\",\"opacity\":0.8}";

二、拷貝構造函數

拷貝構造函數的主要作用是用一個已存在的Window對象來初始化新對象。

class Window
{public:Window(){ }virtual ~Window(){ }// const:確保原對象不被修改,允許接收常量對象。Window(const Window& obj){win_id = obj.win_id;                                sizeType = obj.sizeType;type = obj.type;zorder = obj.zorder; isBackground = obj.isBackground; isFreeze = obj.isFreeze; }
..........

*默認行為:要是沒有自定義拷貝構造函數,編譯器會生成默認的,不過默認的是淺拷貝,這在對象管理動態資源時可能會引發問題。比如指針,淺拷貝僅復制指針值,導致多個對象指向同一塊內存,析構時會引發雙重釋放錯誤。

三、賦值運算符重載

賦值運算符重載 Window& operator=(const Window& obj) 允許你使用 = 符號將一個 Window 對象的值賦給另一個 Window 對象。

class Window
{public:Window(){ }virtual ~Window(){ }Window& operator=(const Window& obj){if (this == &obj) return *this;  // 處理自我賦值win_id = obj.win_id;                                sizeType = obj.sizeType;type = obj.type;zorder = obj.zorder; isBackground = obj.isBackground; isFreeze = obj.isFreeze; isLock = obj.isLock; return *this;}
..........

舉例:

Window win1;
Window win2;
win2 = win1;

四、比較運算符重載

class Window
{public:Window(){ }virtual ~Window(){ }// 相等比較運算符的實現bool operator==(const Window& obj) const{if(win_id == obj.win_id &&sizeType == obj.sizeType &&type == obj.type &&zorder == obj.zorder &&source == obj.source &&layerout == obj.layerout &&invalidResource == obj.invalidResource &&layerType == obj.layerType)return true;elsereturn false;}// 不相等比較運算符的實現bool operator!=(const Window& obj) const{return !operator==(obj);}
..........

舉例:

Window win1;
Window win2;
win2 = win1;
if(win1 == win2)
{........
}

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

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

相關文章

6.6 計算機網絡面試題

描述一下打開百度首頁后發生的網絡過程 網頁非常慢轉圈圈的時候,要定位問題需要從哪些角度? server a和server b,如何判斷兩個服務器正常連接?出錯怎么辦? 服務端正常啟動了,但是客戶端請求不到有哪些原因?…

Java -jar命令運行外部依賴JAR包的深度場景分析與實踐指南

Java -jar命令運行外部依賴JAR包的深度場景分析與實踐指南 引言:外部依賴JAR的必要性 在Java應用部署中,java -jar命令是啟動可執行JAR包的標準方式。但當應用需要依賴外部JAR文件時(如插件系統、模塊化部署、共享庫等場景)&…

XHR / Fetch / Axios 請求的取消請求與請求重試

XHR / Fetch / Axios 請求的取消請求與請求重試是前端性能優化與穩定性處理的重點,也是面試高頻內容。下面是這三種方式的詳解封裝方案(可直接復用)。 ? 一、Axios 取消請求與請求重試封裝 1. 安裝依賴(可選,用于擴展…

2025最新Java日志框架深度解析:Log4j 2 vs Logback性能實測+企業級實戰案例

一、為什么printStackTrace是"代碼墳場"? 你寫的日志可能正在拖垮系統! 在Java開發中,直接調用printStackTrace()打印異常堆棧是最常見的"自殺式操作"。這種方式會導致三大致命問題: 無法分級控制&#xff…

前端面試四之Fetch API同步和異步

Fetch API(Fetch Application Programming Interface)是一個現代的、基于Promise的網絡請求接口,用于在瀏覽器環境中發起網絡請求并處理響應。它是對傳統XMLHttpRequest的改進,提供了更簡潔、靈活和強大的功能,廣泛應用…

ubuntu 20.04掛載固態硬盤

我們有個工控機,其操作系統是ubuntu 20.04。可以接入一個固態硬盤。將固態硬盤插好后,就要進行掛載。在AI的指導下,過程并不順利。記錄如下: 1、檢查硬盤是否被識別 安裝好硬盤后,運行以下命令來檢查Linux系統是否…

涂裝協作機器人:重新定義涂裝工藝的智能化未來

一、涂裝場景的產業變革與核心訴求 1.1 千億級市場的技術突圍戰 在汽車制造領域,涂裝車間被稱為"工業化妝間",其工藝質量直接影響產品溢價能力。當前行業面臨三重挑戰: 質量維度:傳統人工噴涂存在膜厚波動15μm的行業…

Unity優化篇之DrawCall

當然可以!以下是完整、詳盡、可發布的博客文章,專注講解 Unity 的靜態合批與動態合批機制,并詳細列出它們對 Shader 的要求和所有限制條件。文章結構清晰、技術深度足夠,適合發布在 CSDN、掘金、知乎等技術平臺。 urp默認隱藏動態…

Electron桌面應用下,在拍照、展示pdf等模塊時,容易導致應用白屏

Electron 應用白屏問題分析與解決方案 Electron 應用中拍照、PDF展示等模塊導致白屏的常見原因通常與內存泄漏、渲染進程崩潰或資源加載超時有關。以下是具體排查與解決方法: 檢查內存泄漏 項目中,分析代碼,高頻操作或未釋放的資源可能導致…

比對++Hex or Bin文件

用NotePad 安裝 ?? Hex-Editor 插件 1.1參考方法路徑https://cloud.tencent.com/developer/article/2311013 1.2 下載 Hex-Editor.dll文件路勁 https://sourceforge.net/projects/npp-plugins/ 比對 2.1, 顯示Bin 插件/Hex Editor/View in Hex 2.2 插件/Compare(運行很不流…

以STM32H7微控制器為例,簡要說明stm32h7xx_it.c的作用

在STM32開發中,stm32h7xx_it.c文件是中斷服務例程(ISR, Interrupt Service Routine)的核心實現文件,其作用與產生的邏輯如下: 一、文件的核心作用 中斷處理入口 該文件定義了STM32H7微控制器所有硬件中斷和異常的處理函…

若依框架頁面緩存查詢條件后,切換頁面想重新請求一下數據

因為框架使用了Keep-Alive緩存組件,所以使用onActivated鉤子 import { onActivated } from vue;// 當組件從緩存中重新激活時 onActivated(() > {getList(); });

智能心理醫療助手開發實踐:從技術架構到人文關懷——CangjieMagic情感醫療應用技術實踐

作為一名長期耕耘在醫療健康領域的技術開發者,我至今仍清晰地記得三年前那個深夜——當我調試的心理健康AI第一次對用戶的情緒崩潰做出恰當回應時,整個團隊爆發的歡呼聲。那一刻,我深刻意識到技術不只是冰冷的邏輯,更可以成為溫暖…

漢諾塔問題深度解析

漢諾塔問題深度解析 一、漢諾塔問題的起源與背景1.1 問題起源1.2 歷史發展 二、漢諾塔問題的描述與規則2.1 問題描述2.2 示例說明 三、漢諾塔問題的遞歸求解原理3.1 遞歸思想概述3.2 漢諾塔問題的遞歸分解3.3 遞歸調用棧分析 四、漢諾塔問題的多語言實現4.1 Python實現4.2 C實現…

【Node.js 深度解析】npm install 遭遇:npm ERR! code CERT_HAS_EXPIRED 錯誤的終極解決方案

目錄 📚 目錄:洞悉癥結,精準施治 🔍 一、精準剖析:CERT_HAS_EXPIRED 的本質 🕵? 二、深度溯源:證書失效的 N 重誘因 💡 三、高效解決策略:六脈神劍,招招…

【SpringBoot自動化部署】

SpringBoot自動化部署方法 使用Jenkins進行持續集成與部署 Jenkins是最常用的自動化部署工具之一,能夠實現代碼拉取、構建、測試和部署的全流程自動化。 配置Jenkins任務時,需要添加Git倉庫地址和憑證,設置構建觸發器(如GitHub…

動態規劃-1035.不相交的線-力扣(LeetCode)

一、題目解析 光看題目要求和例圖,感覺這題好麻煩,直線不能相交啊,每個數字只屬于一條連線啊等等,但我們結合題目所給的信息和例圖的內容,這不就是最長公共子序列嗎?,我們把最長公共子序列連線起…

Double/Debiased Machine Learning

獨立同步分布的觀測數據 { W i ( Y i , D i , X i ) ∣ i ∈ { 1 , . . . , n } } \{W_i(Y_i,D_i,X_i)| i\in \{1,...,n\}\} {Wi?(Yi?,Di?,Xi?)∣i∈{1,...,n}},其中 Y i Y_i Yi?表示結果變量, D i D_i Di?表示因變量, X i X_i Xi?表…

Tailwind CSS 實戰:基于 Kooboo 構建 AI 對話框頁面(八):異步處理邏輯詳解

在現代 Web 應用中,異步處理是實現流暢交互的核心技術。本文基于前幾章實現的內容Tailwind CSS 實戰:基于 Kooboo 構建 AI 對話框頁面(七):消息框交互功能添加-CSDN博客,深入解析 AI 對話框頁面中異步邏輯的…

Asp.net Core 通過依賴注入的方式獲取用戶

思路:Web項目中,需要根據當前登陸的用戶,查詢當前用戶所屬的數據、添加并標識對象等。根據請求頭Authorization 中token,獲取Redis中存儲的用戶對象。 本做法需要完成 基于StackExchange.Redis 配置,參考:…