目錄
? 示例:二維向量類的運算符重載
✅ 使用示例
? 關鍵點說明
⚠️ 注意事項
首頁 後端開發 C++ C操作員超載示例

C操作員超載示例

Aug 15, 2025 am 10:18 AM
c++ 運算符重載

C 中的運算符重載允許為自定義類型賦予標準運算符新行為,1. 通過成員函數重載返回新對象;2. 重載=修改當前對象並返回引用;3. 友元函數重載必須為成員函數,對稱操作可定義非成員函數支持類型轉換,使自定義類型使用更自然,完整結束。

C   operator overloading example

C 中的運算符重載允許我們為自定義類型(如類或結構體)賦予標準運算符新的行為。下面是一個實用且清晰的示例:通過重載 運算符來操作一個表示二維向量的<code>Vector2D類。

C   operator overloading example

? 示例:二維向量類的運算符重載

#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   operator overloading example

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

PHP教程
1587
276
應用程序無法正常啟動(0xc0000906)怎麼辦?解決方案看這裡 應用程序無法正常啟動(0xc0000906)怎麼辦?解決方案看這裡 Aug 13, 2025 pm 06:42 PM

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

如何在C中使用正則表達式 如何在C中使用正則表達式 Aug 12, 2025 am 10:46 AM

要使用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怎樣修復 只需三種方法 Aug 14, 2025 pm 08:03 PM

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

如何在C中獲取文件的大小 如何在C中獲取文件的大小 Aug 11, 2025 pm 12:34 PM

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

C操作員超載示例 C操作員超載示例 Aug 15, 2025 am 10:18 AM

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

如何為C項目編寫基本的製作費? 如何為C項目編寫基本的製作費? Aug 15, 2025 am 11:17 AM

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

c弦向量示例 c弦向量示例 Aug 21, 2025 am 04:02 AM

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

如何與C中的STD ::變體一起工作 如何與C中的STD ::變體一起工作 Aug 14, 2025 am 11:32 AM

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

See all articles