我試圖在C++中實現一個類COMPLEX,並且重載了算術運算符以及用於輸入/輸出的'< <'和'>>'運算符。單獨地也當級聯如預期的算術運算符的工作 - 但試圖執行的語句,例如當我無法獲得正確的結果:是否有可能通過重載算術運算符級聯重載提取運算符?
cout << "something" << complex1 + complex2 << "\n";
其中complex1和complex2是類複雜的對象。類定義的
片段:
class COMPLEX{
int a; // Real part
int b; // Imaginary part
public:
COMPLEX operator = (COMPLEX);
COMPLEX operator + (COMPLEX) const;
friend istream& operator >> (istream &, COMPLEX &);
friend ostream& operator << (ostream &, COMPLEX &);
-snip-
}
COMPLEX COMPLEX::operator = (COMPLEX t_c) {
return COMPLEX(a = t_c.a, b = t_c.b);
}
COMPLEX COMPLEX::operator + (COMPLEX t_c) const{
return COMPLEX(a + t_c.a, b + t_c.b);
}
istream& operator >> (istream &i_s, COMPLEX &t_c){
i_s >> t_c.a >> t_c.b;
return i_s;
}
ostream& operator << (ostream &o_s, COMPLEX &t_c){
o_s << t_c.a << "+" << t_c.b << "i";
return o_s;
}
從這個我也有重載操作
開。
當我試圖與任何其他重載操作符級聯< <時,重載的朋友函數沒有被調用。相反,操作員正在調用,並顯示結果。
耶!我早些時候嘗試過,而且確實有效。但我想知道我們是否可以執行類似cout << 1 + 2的操作;那麼這是否也適用於上述情況? – kny8mare 2011-02-05 20:28:14
哎呀!試過你的方法..仍然沒有工作。結果是像以前一樣被強制轉換爲int。我可以做這項工作的唯一方法是將結果分配給COMPLEX類型的第三個對象,然後cout。 – kny8mare 2011-02-05 20:38:10