好儿郎-志在四方 2015-11-29 06:15 采纳率: 100%
浏览 2091
已采纳

c++用成员函数和友元函数实现复数的加减操作,产生了二义性,麻烦各位大哥大姐解答一下,感激不尽

我想在一个程序中用友元函数和类的成员函数实现复数的加减操作,
类中这样定义:
图片说明

main函数中用这几句调用的话存在二义性:
图片说明

c3=c1+c2;这一句就不知道到底该调用成员函数还是调用友元函数,但是重载的话只有参数类型和参数个数不同,就应该没问题的,这里该怎么解决呢?
麻烦各位大哥大姐了;下面是程序的代码,

#include

class Complex
{
public:
Complex(double r=0.0,double i=0.0):real(r),imag(i){}
Complex operator+ (const Complex &c2)const;
Complex operator- (const Complex &c2)const;

    friend Complex operator+(const Complex &c1,const Complex &c2);
    friend Complex operator-(const Complex &c1,const Complex &c2);


    friend ostream &operator<< (ostream &out,const Complex &c);
    void display()const;
private:
    double real;
    double imag;            

} ;

Complex Complex::operator+ (const Complex &c2)const
{
return Complex(real+c2.real,imag+c2.imag);
}
Complex Complex::operator- (const Complex &c2)const
{
return Complex(real-c2.real,imag-c2.imag);
}

void Complex::display()const
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}

Complex operator+(const Complex &c1,const Complex &c2)
{
return Complex(c1.real+c2.real,c1.imag+c2.imag);
}
Complex operator-(const Complex &c1,const Complex &c2)
{
return Complex(c1.real-c2.real,c1.imag-c2.imag);
}
ostream &operator<< (ostream &out,const Complex &c)
{
out<<"("<<c.real<<","<<c.imag<<")"<<endl;
return out;
}

int main()
{
Complex c1(5,4),c2(2,10),c3;
c1.display();
c2.display();
c3.display();

c3=c1+c2;
c3.display();
cout<<c3;

c3=c3-c1;
c3.display();
cout<<c3;

return 0;

}

  • 写回答

4条回答 默认 最新

  • 求弱批 2015-11-29 08:38
    关注

    你在函数里写个输出就能看出优先级了,具体我也没试过,无法给出正确答案

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。