myclass
私が書いたC ++クラスであり、私が書いたとき:
myclass x;
cout << x;
どうすれば出力を行う10
か20.2
のように、integer
またはfloat
値はありますか?
回答:
通常operator<<
、クラスのオーバーロードによって:
struct myclass {
int i;
};
std::ostream &operator<<(std::ostream &os, myclass const &m) {
return os << m.i;
}
int main() {
myclass x(10);
std::cout << x;
return 0;
}
const myclass &m
代わりにすべきではありませんmyclass const &m
か?
const
、型の後に次のように記述して、外側に向かって進みますm is a reference to a const myclass
。タイプ前にそれで、それはmは無意味と真に非文法的とのぎざぎざのエッジ上の権利であるのMyClassのconst`への参照である」と言う。
<<
演算子をオーバーロードする必要があります、
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
次に、実行するとcout << x
(この場合x
、タイプmyclass
はどこにありますか)、メソッドで指示した内容がすべて出力されます。上記の例の場合、それはx.somevalue
メンバーになります。
メンバーの型をに直接追加できないostream
場合は<<
、上記と同じ方法を使用して、その型の演算子もオーバーロードする必要があります。
非常に簡単です。実装するだけです。
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
outpoutをチェーンするには、osへの参照を返す必要があります(cout << foo << 42 << endl)
myclass
は、フレンドとして宣言する必要があることに注意してください。private
operator<<()
myclass
std::ostream& operator<<(std::ostream&, myclass const&)