有一個類A具有虛擬方法print()和重載操作符< <定義爲朋友函數。C++:Operator <<在派生類中使用默認參數?
#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的默認參數對象,從而運營商< <正確替換print()方法?這個超載是錯誤的
friend std::ostream & operator << (std::ostream * o= &std::cout, const A &aa)
2]我不確定,如果這行調用派生類B中父類A的運算符是正確的?
o << (A)(bb);
3]有沒有更好的辦法如何重載操作< <沒有「朋友」宣言?
感謝您的幫助....
當'operator <<'可以簡單地調用'print'時,爲什麼要在'operator <<'中複製'print'的功能?然後你只需要一個'operator <<(ostream&,const Base&)',它可以用於完整的層次結構。 – pmr 2012-07-21 20:24:33