本文原標題為「簡單的多態實例」,但程式碼實際演示的是 **運算子多載** 概念的雛形——利用 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;
}
| 特性 | 子類別虛函數多態 | 運算子多載 |
|---|---|---|
| 綁定時機 | 執行期 (動態) | 編譯期 (靜態) |
| 機制 | 虛函數表 (vtable) | 函數簽名匹配 (名稱修飾) |
| 典型用途 | 介面介面、策略模式、插件架構 | 數學型別、智慧指標、串流、DSL |
| 關鍵字 | virtual, override | operator + 運算子符號 |