”功能的方式。 1.作为非成员函数 2.作为 friend #include using namespace std; class xxx{ priv-6ren">
gpt4 book ai didi

c++ - 应该使用哪个 "<<"运算符函数?

转载 作者:行者123 更新时间:2023-11-30 02:36:25 25 4
gpt4 key购买 nike

在项目中有两种实现运算符“<<”或“>>”功能的方式。

1.作为非成员函数

2.作为 friend

  #include<iostream>
using namespace std;
class xxx{
private: int x;
public: xxx(int val=0):x(val){}
int getx(){return x;}
friend ostream& operator <<(ostream& o, xxx& x1);
};
ostream& operator<<(ostream& o, xxx& x1)
{
o<<x1.getx();
return o;
}
ostream& operator <<(ostream& o, xxx& x1)
{
o<<x1.getx();
return o;
}
int main(int argc, char *argv[])
{
xxx x1(5);
return 0;
}

看起来非成员函数和友元函数在实现时都具有相同的签名,因此我得到编译器错误:“错误:'std::ostream& operator<<(std::ostream&, xxx&)' 的重新定义”。

谁能帮忙编译上面的代码。

还想知道在什么情况下我们应该使用非成员“operator =”函数而不是 friend “operator =”函数。

最佳答案

您似乎感到困惑——友元函数非成员函数。因此,您的 friend 声明声明了非成员函数并使其成为友元。然后,您定义了(非成员)函数两次,这是一个错误。

定义(大多数)重载运算符的两种方法是作为成员 函数或非成员函数。您不能为同一个运算符(operator)同时执行这两项操作,如果您将其定义为非成员,则它可能是您喜欢的 friend 也可能不是 friend (friend 无关紧要)

关于您的最后一个问题——您不能将 operator= 定义为非成员函数。它必须 是一个成员函数。 friend 是无关紧要的。

关于c++ - 应该使用哪个 "<<"运算符函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32800251/

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