C++演算子リロード3

1822 ワード

入出力フロー演算子の再ロード
コード#コード#
#include 
#include 
#include 
using namespace std;
class MyComplex {
public:
    double a, b;
    MyComplex() {};
    MyComplex(double A, double B) {
        a = A;
        b = B;
    }
    MyComplex operator+(const MyComplex& c);
    MyComplex operator-(const MyComplex& c);
    MyComplex operator*(const MyComplex& c);
    MyComplex operator/(const MyComplex& c);
    friend ostream& operator <>(istream& is, MyComplex& z);
};
ostream& operator <>(istream& is,  MyComplex& z) {
    is >> z.a >> z.b;
    return is;
}
MyComplex MyComplex::operator+(const MyComplex& c) {
    return MyComplex(a + c.a, b + c.b);
}
MyComplex MyComplex::operator-(const MyComplex& c) {
    return MyComplex(a - c.a, b - c.b);
}
MyComplex MyComplex::operator*(const MyComplex& c) {
    return MyComplex(a * c.a, b * c.b);
}
MyComplex MyComplex::operator/(const MyComplex& c) {
    return MyComplex(a / c.a, b / c.b);
}
int main() {
    MyComplex z1, z2;
    cin >> z1;
    cin >> z2;
    cout << z1 <::max(), '
'); cin.get(); #endif return 0; }

関連説明
ostreamというクラスにはsetf()関数があり、数値出力時にフラグビットを付けるかどうかを設定できます.【具体的にはsetf関数を参照してください】
ostream os;
os.setf(std::ios::showpos);
os << 12;  //   +12

ostreamというクラスにはunsetf()関数も用意されており、あるフラグビットをキャンセルすることができます.
setfを使用して複数の1+2 iを出力すると
os.setf(std::ios::showpos);
os << real << image << "i";

「+1+2 i」と表示されます.どのようにして実部の前の正号を消しますか?この場合、複数の実部と虚部をそれぞれ出力する2つの文が必要です.実部を出力する前に、os.unsetf(std::ios::showpos);を使用して虚部を出力する前に、os.setf(std::ios::showpos);を使用