有一个类 A 具有虚方法 print() 和重载运算符 << 定义为友元函数。
#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] 有什么方法可以使用默认参数传递指向 ostream 对象的指针,以便 operator << 正确替换 print() 方法?这种重载是错误的
friend std::ostream & operator << ( std::ostream * o= &std::cout, const A &aa )
2]我不确定,如果派生类B中父类A的这一行调用运算符是否正确?
o << (A)(bb);
3]有没有更好的方法如何在没有“朋友”声明的情况下重载运算符<<?
谢谢你的帮助....