gpt4 book ai didi

c++ - 在 C++ 中继承友元运算符

转载 作者:太空宇宙 更新时间:2023-11-04 16:25:18 24 4
gpt4 key购买 nike

所以我有 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;
}

我试图在B版本的operator<<中调用A版本的operator<<,当然它实际上并不属于A,因此无法编译。我应该如何实现这一目标?

另外请注意,实际上 A 和 B 有自己的头文件和正文文件。

最佳答案

你可以让你的B对象看起来像一个A对象:

std::ostream& operator<< (std::ostream& out, B const& b) {
out << static_cast<A const&>(b);
out << "boop2" << b.r;
return out;
}

请注意,您几乎肯定不想按值传递要打印的对象。我已将签名更改为使用 const&:这表明该对象不会被更改,也不会被复制。

关于c++ - 在 C++ 中继承友元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12522624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com