C ++演算子のオーバーロード-入力/出力演算子

  IO標準ライブラリとの整合性を保つために、オーバーロードされた入出力演算子関数の最初の行のパラメーターはストリームの参照であり、2番目の行のパラメーターはオブジェクトの参照です。
  
  クラスのメンバー関数としてオーバーロードする場合、1行目のパラメーターはオブジェクトへの参照である必要があり、2行目のパラメーターはストリームへの参照です。
  
  使用方法はClassObj << coutであり、これは標準IOライブラリと整合性がないため、入出力演算子はクラスのメンバー関数としてオーバーロードできず、クラスのフレンド関数および通常の関数としてオーバーロードできます。
  
  通常、オーバーロードされた出力演算子の2行目のパラメーターはconstです。
  
  これは、クラスの出力がそれを変更してはならないためです。ただし、オーバーロードされた入力演算子の2行目のパラメーターは非constでなければなりません。それ以外の場合、代入できません。
  
  オーバーロードの基本的な方法は次のとおりです:
  
  bubuko.com、bubukou
  
  //オーバーロードされた出力演算子
  
  ostream&operator <<(ostream&out、const ClassType&obj)
  
  {
  
  out << / *出力したいもの1 * / << / *出力するもの2 * / << ...;
  
  return out;
  
  }
  
  //入力演算子
  
  istream&演算子<<(istream&in、ClassType&obj)
  
  {
  
  in >> / *入力したいものをオーバーロード1 * / >> / *入力する内容2 * / >> ...;
  
  //エラーをチェックし、ファイルの終わりが
  
  返される可能性を確認します。
  

  

  
  例:クラスPersionはフレンド関数を使用して入力演算子と出力演算子をオーバーロードし、クラスPersionAは通常の関数を使用して入力演算子と出力演算子をオーバーロードします。
  
  bubuko.com、布布tt
  
  #include <cstring>
  
  #include <iostream>
  
  using namespace std;
  
  class Persion
  
  {
  
  public:
  
  // constructor
  
  Persion(const char * pname、unsigned int ag、double he、double we):age(ag )、height(he)、weight(we){strcpy(name、pname);}
  
  //演算子のオーバーロード:<<
  
  friend ostream&operator <<(ostream&out、const Persion&ref)
  
  {
  
  out << ref.name << " \ t "<< ref.age <<" \ t "<< ref.height <<" \ t "<< ref.weight;
  
  return out;
  
  }
  
  // operator overload:>>
  
  friend istream&operator >>
  

  

  
  unsigned int ag = 0;
  
  ダブル彼= 0;
  
  double we = 0;
  
  in >> name >> ag >> he >> we;
  
  //入力が成功した
  
  かどうかを確認しますif(in)
  
  {// Input
  
  Succeeded strcpy(ref.name、name);
  
  ref.age = ag;
  
  ref.height = he;
  
  ref.weight = we;
  
  }
  
  else
  
  {// Input Failed
  
  }
  
  return in;
  
  }
  
  private:
  
  char name [40];
  
  unsigned int age;
  
  2倍の高さ;
  
  二重の重さ;
  
  };
  
  クラスPersionA
  
  {
  
  public:
  
  // constructor
  
  PersionA(const char * pname、unsigned int ag、double he、double we):age(ag)、height(he)、weight(we){strcpy(name、pname);}
  
  // GetData
  
  char * GetName(void) {return name;}
  
  unsigned int&GetAge(void){return age;}
  
  double&GetHeight(void){return height;}
  
  double&GetWeight(void){return weight;}
  
  private:
  
  char name [40];
  
  unsigned int age;
  
  2倍の高さ;
  
  二重の重さ;
  
  };
  
  //演算子のオーバーロード:<<
  
  ostream&operator <<(ostream&out、PersionA&ref)
  
  {
  
  out << ref.GetName()<< "\ t" << ref.GetAge()<< "\ t" << ref。 GetHeight()<< "\ t" << ref.GetWeight();
  
  戻る;
  

  

  
  istream&演算子>>(istream&in、PersionA&ref)
  
  {
  
  char name [40] = {0};
  
  unsigned int ag = 0;
  
  ダブル彼= 0;
  
  double we = 0;
  
  in >> name >> ag >> he >> we;
  
  //入力が成功した
  
  かどうかを確認しますif(in)
  
  {// Input
  
  Succeeded strcpy(ref.GetName()、name);
  
  ref.GetAge()= ag;
  
  ref.GetHeight()= he;
  
  ref.GetWeight()= we;
  
  }
  
  else
  
  {// Input Failed
  
  }
  
  return in;
  
  }
  
  int main(void)
  
  {
  
  Persion per( "Jack"、20、175、65);
  
  cout << perl << endl;
  
  cin >> per;
  
  cout << perl << endl;
  

  
  cout << perA << endl;
  
  cin >> perA;
  
  cout << perA << endl;
  
  0を返します。
  
  }

おすすめ

転載: www.cnblogs.com/aquariusunny/p/12729867.html