C操作員超載示例
C 中的運算符重載允許為自定義類型賦予標準運算符新行為,1. 通過成員函數重載返回新對象;2. 重載=修改當前對象並返回引用;3. 友元函數重載必須為成員函數,對稱操作可定義非成員函數支持類型轉換,使自定義類型使用更自然,完整結束。
C 中的運算符重載允許我們為自定義類型(如類或結構體)賦予標準運算符新的行為。下面是一個實用且清晰的示例:通過重載
和運算符來操作一個表示二維向量的<code>Vector2D
類。

? 示例:二維向量類的運算符重載
#include <iostream> using namespace std; class Vector2D { public: double x, y; // 構造函數Vector2D(double x = 0, double y = 0) : x(x), y(y) {} // 1. 重載加法運算符(成員函數方式) Vector2D operator (const Vector2D& other) const { return Vector2D(x other.x, y other.y); } // 2. 重載賦值加法運算符( =) Vector2D& operator =(const Vector2D& other) { x = other.x; y = other.y; return *this; } // 3. 重載輸出運算符(友元函數,因為左操作數是ostream) friend ostream& operator<<(ostream& os, const Vector2D& v) { os << "(" << vx << ", " << vy << ")"; return os; } // 4. 重載相等比較運算符bool operator==(const Vector2D& other) const { return (x == other.x) && (y == other.y); } };
✅ 使用示例
int main() { Vector2D a(3.0, 4.0); Vector2D b(1.5, 2.5); Vector2D c = ab; cout << "a = " << a << endl; // 輸出: (3, 4) cout << "b = " << b << endl; // 輸出: (1.5, 2.5) cout << "c = ab = " << c << endl; // 輸出: (4.5, 6.5) if (a == Vector2D(3.0, 4.0)) { cout << "向量a 等於(3, 4)" << endl; } a = b; cout << "a = b 後,a = " << a << endl; // 輸出: (4.5, 6.5) return 0; }
? 關鍵點說明
operator
:返回一個新的對象,不修改原對象。-
operator =
:修改當前對象並返回引用,提高效率。 -
operator<<
:必須定義為友元函數,因為左操作數是std::ostream
。 -
operator==
:用於判斷兩個向量是否相等,常用於測試或查找。
⚠️ 注意事項
- 不要重載
&&
、||
運算符,因為會失去短路求值特性。 - 通常
=
、[]
、()
、->
必須作為成員函數重載。 - 對於對稱操作(如
1 v
),可以將operator
定義為非成員函數。
例如,支持Vector2D v = 2.0 Vector2D(1,1);
可以這樣寫:
friend Vector2D operator (const Vector2D& v, double scalar) { return Vector2D(vx scalar, vy scalar); } friend Vector2D operator (double scalar, const Vector2D& v) { return v scalar; // 利用上面的函數}
基本上就這些。運算符重載讓自定義類型用起來像內置類型一樣自然,是C 面向對象編程的重要特性之一。

以上是C操作員超載示例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

打開軟件或遊戲時,突然出現“應用程序無法正常啟動(0xc0000906)”的提示,許多用戶都會感到困惑,不知從何下手。實際上,這類錯誤大多源於系統文件損壞或運行庫缺失。別急著重裝系統,本文為你提供幾種簡單有效的解決方法,助你快速恢復程序運行。一、0xc0000906錯誤到底是什麼?錯誤代碼0xc0000906屬於Windows系統常見的啟動異常,通常表示程序在運行時無法加載必要的系統組件或運行環境。該問題常出現在運行大型軟件或遊戲時,主要原因可能包括:必要的運行庫未安裝或遭到破壞。軟件安裝包不完

要使用C 中的正則表達式,需包含頭文件,並利用其提供的函數進行模式匹配和文本處理。 1.使用std::regex_match進行全字符串匹配,僅當整個字符串符合模式時返回true;2.使用std::regex_search在字符串中查找任意位置的匹配;3.使用std::smatch提取捕獲組,通過matches[0]獲取完整匹配,matches[1]及後續獲取子匹配;4.使用std::regex_replace替換匹配的文本,支持用$1、$2等引用捕獲組;5.可在構造regex時添加icase(

電腦提示“計算機中丟失MSVCP71.dll”,通常是因為系統缺少關鍵運行組件,導致軟件無法正常加載。本文將深入解析該文件的功能、報錯根源,並提供三種高效解決方案,助你快速恢復程序運行。一、MSVCP71.dll是什麼? MSVCP71.dll屬於MicrosoftVisualC 2003的核心運行庫文件,屬於動態鏈接庫(DLL)類型,主要用於支持C 編寫的程序調用標準函數、STL模板及基礎數據處理模塊。許多2000年代初開發的應用程序和經典遊戲都依賴此文件運行。一旦該文件缺失或損壞,系

使用std::ifstream的seekg和tellg方法可跨平台獲取文件大小,通過打開二進製文件並定位到末尾,利用tellg()返回字節數;2.C 17及以上推薦使用std::filesystem::file_size,代碼簡潔且通過異常處理錯誤,需啟用C 17標準;3.在POSIX系統上可使用stat()函數高效獲取文件大小,適用於性能敏感場景。應根據編譯器和平台選擇合適方法,優先使用std::filesystem(若可用),否則使用ifstream保證兼容性,或在Unix系統上使用st

C 中的運算符重載允許為自定義類型賦予標準運算符新行為,1.通過成員函數重載 返回新對象;2.重載 =修改當前對象並返回引用;3.友元函數重載

AbasicMakeFileAutomatesc compilationByByDefindingruleswithtargets和commands.2.KeyComponentsIncludeVariablesLikeCXX,CXXFlags,cxxflags,target,srcs,srcs,srcs,srcs,srcs,objstosimplifyConfiguration.3.AptertNrules.3.aptertnrules(compiles)comptiles $ compiles $:%

std::vector的基本用法包括:1.聲明vector;2.使用push_back()添加元素;3.用初始化列表初始化;4.用範圍for循環遍歷;5.通過索引或back()訪問元素;6.直接賦值修改元素;7.用pop_back()刪除末尾元素;8.調用size()獲取元素數量;操作時推薦使用constauto&避免拷貝,預分配reserve()提升性能,並註意訪問前檢查非空,該數據結構是處理字符串列表的高效首選方式。

std::variant是C 17引入的類型安全聯合體,能安全地持有多個指定類型之一的值,通過std::get、std::holds_alternative、std::visit和std::get_if等方法實現安全訪問與類型檢查,結合std::monostate可模擬可選值,推薦使用std::visit進行類型分發並避免大型類型列表以提升可維護性,最終確保類型安全和異常安全。
