所以我有A类和B类,其中B类扩展了A类。我必须在两个类中超载<和<。我希望在B类运算符的函数定义中,我可以调用A类的重载运算符,但是我很难这样做。继承C++中的朋友操作符
#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;
}
我尝试调用的版本操作< <在B版的操作< <的,当然它实际上并不属于A,所以不能编译。我应该如何实现这一目标?
另外,请注意,实际上A和B都有自己的头文件和正文文件。
你有没有考虑让操作符重载A的成员? – Borgleader
@Borgleader:你不能让operator <<成为A的成员,因为A出现在操作符的右侧,而不是左侧。它必须是独立功能或朋友功能。 – bstamour
@SethCarnegie:由于答案得到解决,我删除了我的评论(我知道这是错的;) –