仮想メソッドprint()とオーバーロードされた演算子<<をフレンド関数として定義したクラスAがあります。
#include <iostream>
class A
{
public:
double a1, a2;
A(): a1(10.0), a2(10.0) {}
virtual void print ( std::ostream * o = &std::cout ) const
{
*o << a1<< '\t' << a2 << '\n';
}
friend std::ostream & operator << ( std::ostream & o, const A &aa )
{
o << aa.a1 << '\t' << aa.a2 << '\n';
return o;
}
};
同様に、派生クラスBでも
class B : public A
{
public:
double b1, b2;
B(): A(), b1(20.0), b2(20.0) {}
virtual void print ( std::ostream * o = &std::cout ) const
{
A::print ( o );
*o << b1<< '\t' << b2;
}
friend std::ostream & operator << ( std::ostream & o, const B &bb )
{
o << (A)(bb);
o << bb.b1 << '\t' << bb.b2 << '\n';
return o;
}
};
次の質問があります。
1]演算子<<がprint()メソッドを正しく置き換えるように、デフォルトのパラメータを使用してostreamオブジェクトへのポインタを渡す方法はありますか?このオーバーロードは間違っています
friend std::ostream & operator << ( std::ostream * o= &std::cout, const A &aa )
2]派生クラスBの親クラスAのこの行呼び出し演算子が正しいかどうかはわかりませんか?
o << (A)(bb);
3]「friend」宣言なしで演算子<<をオーバーロードするより良い方法はありますか?
ご協力いただきありがとうございます....