C++入出力演算子のリロード

1492 ワード

C++のストリーム挿入演算子">>"とストリーム出力演算子"<>"演算子がリロードされましたが、具体的にはどのように実現されていますか?
入力演算子のリロード
istream& operator>>(istream& in, A& a)
{
    in>>"     1">>"     2"...;
    return in;
}

C++の入力演算子のリロード最初のパラメータは入力ストリームオブジェクトの参照であり、2番目のパラメータは入力が必要なクラスオブジェクトの参照であり、一般的に2番目のパラメータを非constタイプとして定義します.そうしないと値を割り当てることができません.戻り値は入力ストリームistream&です.
出力演算子のリロード
ostream& operator<"    1"<<"    1"...;
    return out;
}

C++で出力演算子が再ロードされる最初のパラメータは出力ストリームオブジェクトの参照であり、2番目のパラメータは出力が必要なクラスオブジェクトの参照であり、出力時にオブジェクトを変更する必要がなく、戻り値は出力ストリームostream&であるため、一般的に2番目のパラメータをconstタイプとして定義します.
なぜ入出力演算子をfriend関数として定義しますか?
共通点は、入力演算子のリロード関数と出力演算子のリロード関数をメタクラスとして宣言することですが、なぜこのように設計されているのでしょうか.
ゆうげんかんすう
友元関数は任意のクラスに呼び出され,クラス共有を実現し,不要なシステムオーバーヘッドを低減し,効率を向上させ,他のクラスがこのクラスのプライベート変数にアクセスできるようにすることを知っている.しかし,クラスのパッケージング性を損なうという欠点もあり,一般的には使用を推奨しない.
友元関数の使用シーン
  • 入出力演算子で
  • をリロードする.
  • 両クラスが共有データを必要とする場合
  • の原因となる
    ここでは友元関数として定義します.友元関数にはthisポインタが含まれていないため、最初のパラメータは必ず入出力ストリームの参照であることを要求します.そうしないと、コードはa<