實現復數類別 Complex,支援:
(a+bi) 或 (a-bi)template <class Elem>
class Complex {
private:
Elem reality; // 實部
Elem falsehood; // 虛部
public:
Complex(Elem r, Elem f) : reality(r), falsehood(f) {}
// 運算符重載
Complex operator+(const Complex& c) const {
return Complex(reality + c.reality, falsehood + c.falsehood);
}
Complex operator-(const Complex& c) const {
return Complex(reality - c.reality, falsehood - c.falsehood);
}
Complex operator*(const Complex& c) const {
return Complex(
reality * c.reality - falsehood * c.falsehood,
reality * c.falsehood + falsehood * c.reality
);
}
Complex operator/(const Complex& c) const {
Elem denom = c.reality * c.reality + c.falsehood * c.falsehood;
if (denom == 0) {
cout << "分母不能為 0" << endl;
return Complex(0, 0);
}
return Complex(
(reality * c.reality + falsehood * c.falsehood) / denom,
(falsehood * c.reality - reality * c.falsehood) / denom
);
}
// 存取器
Elem Reality() const { return reality; }
Elem Falsehood() const { return falsehood; }
// 共軛
void Conjugate() { falsehood = -falsehood; }
// 輸出
void Output() const {
if (falsehood >= 0)
cout << "(" << reality << "+" << falsehood << "i)";
else
cout << "(" << reality << falsehood << "i)";
}
};
int main() {
Complex<float> c1(1, 2), c2(2, 3);
cout << "測試結果:" << endl;
cout << "c1 = (1+2i), c2 = (2+3i)" << endl;
cout << "c1 + c2 = "; (c1 + c2).Output(); cout << endl;
cout << "c1 - c2 = "; (c1 - c2).Output(); cout << endl;
cout << "c1 * c2 = "; (c1 * c2).Output(); cout << endl;
cout << "c1 / c2 = "; (c1 / c2).Output(); cout << endl;
cout << "c1 實部: " << c1.Reality() << ", 虛部: " << c1.Falsehood() << endl;
cout << "c2 實部: " << c2.Reality() << ", 虛部: " << c2.Falsehood() << endl;
cout << "c1 共軛: "; c1.Conjugate(); c1.Output(); cout << endl;
cout << "c2 共軛: "; c2.Conjugate(); c2.Output(); cout << endl;
return 0;
}
const,參數用 const Complex&(a+bi)(c+di) = (ac-bd) + (ad+bc)i(a+bi)/(c+di) = (ac+bd)/(c²+d²) + (bc-ad)/(c²+d²)ifloat/double/long double 任意精度operator==、operator<< 輸出流重載std::complex 替代生產環境代碼