したがって、クラスAとクラスBがあり、クラスBはクラスAを拡張します。両方のクラスで<<と>>をオーバーロードする必要があります。クラスBの演算子の関数定義で、クラスAからオーバーロードされた演算子を呼び出せることを期待していましたが、問題が発生しました。
#include <iostream>
#include <string>
using namespace std;
class A {
friend ostream& operator<<(ostream& out, A a);
protected:
int i;
string st;
public:
A(){
i=50;
st = "boop1";
}
};
ostream& operator<<(ostream &out, A a) {
out << a.i << a.st;
return out;
}
class B : public A {
friend ostream& operator<<(ostream& out, B b);
private:
int r;
public:
B() : A() {
r=12;
}
};
ostream& operator<<(ostream &out, B b) {
out = A::operator<<(out, b); //operator<< is not a member of A
out << "boop2" << b.r;
return out;
}
int main () {
B b;
cout << b;
}
Aのバージョンのoperator<<をBのバージョンのoperator<<で呼び出そうとしましたが、もちろん実際にはAに属していないため、コンパイルできません。これをどのように達成する必要がありますか?
また、実際にはAとBには独自のヘッダーファイルと本文ファイルがあることに注意してください。