首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C++ 運算子多載入門:以整數與浮點數加法為例

     編輯:關於C語言

本文原標題為「簡單的多態實例」,但程式碼實際演示的是 **運算子多載** 概念的雛形——利用 C++ 內建型別 int、float 的 +、<<、>> 運算子針對不同型別表現出不同行為。真正的「多態」通常指虛函數機制。本文重新整理為運算子多載教學範例。

程式碼:內建運算子的多態行為

#include <iostream>
using namespace std;

int main() {
    // 整數運算
    int i1, i2, i_sum;
    cout << "請輸入兩個整數 i1, i2: " << endl;
    cin >> i1 >> i2;          // operator>> 多載:處理 int
    i_sum = i1 + i2;            // operator+  多載:整數加法
    cout << "i1 + i2 = " << i_sum << endl; // operator<< 多載:輸出 int

    // 浮點數運算
    float f1, f2, f_sum;
    cout << "請輸入兩個浮點數 f1, f2: " << endl;
    cin >> f1 >> f2;            // operator>> 多載:處理 float
    f_sum = f1 + f2;            // operator+  多載:浮點數加法 (硬體指令不同)
    cout << "f1 + f2 = " << f_sum << endl; // operator<< 多載:輸出 float

    system("pause");
    return 0;
}

核心觀念:運算子多載

  • 同一運算子符號 (+, <<, >>) 根據**運算元型別** 執行不同機器碼/函數體。
  • 編譯期靜態綁定:編譯器根據型別資訊解析呼叫哪個多載版本,非執行期虛函數表查找。
  • 標準庫實作:iostream 中 operator<<(ostream&, int)、operator<<(ostream&, float) 等皆為非成員函數多載。

自訂型別運算子多載範例:複數類別

class Complex {
    double re_, im_;
public:
    Complex(double r=0, double i=0) : re_(r), im_(i) {}
    // 成員函數多載 + (支援 Complex + Complex)
    Complex operator+(const Complex& rhs) const {
        return Complex(re_ + rhs.re_, im_ + rhs.im_);
    }
    // 友元函數多載 << (支援 cout << Complex)
    friend ostream& operator<<(ostream& os, const Complex& c) {
        return os << '(' << c.re_ << (c.im_ >= 0 ? "+" : "") << c.im_ << 'i' << ')';
    }
};

int main() {
    Complex a(1, 2), b(3, 4);
    Complex c = a + b;       // 呼叫 Complex::operator+
    cout << "a + b = " << c << endl; // 呼叫 operator<<(ostream&, Complex)
    return 0;
}

多態 vs 運算子多載 對照

特性子類別虛函數多態運算子多載
綁定時機執行期 (動態)編譯期 (靜態)
機制虛函數表 (vtable)函數簽名匹配 (名稱修飾)
典型用途介面介面、策略模式、插件架構數學型別、智慧指標、串流、DSL
關鍵字virtual, overrideoperator + 運算子符號
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved