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を返します。
}
C ++演算子のオーバーロード-入力/出力演算子
おすすめ
転載: www.cnblogs.com/aquariusunny/p/12729867.html
おすすめ
ランキング