Mr.LiP 2019-09-12 20:24 采纳率: 0%
浏览 305

C++中系统类型与自定义类型隐式转换与重载函数参数是否引用有什么关系?

简单描述,当重载 + 号参数为非引用时可以实现隐式转换
但若加上引用符号则不行,求解?

错误提示:
error: no match for 'operator+' (operand types are 'Complex' and 'double')|

#include <iostream>
using namespace std;

class Complex
{
public:

    Complex(){real=0,imag=0;}
    Complex(double r, double i){real=r, imag=i;}
    Complex operator - (Complex &c);
    Complex operator * (Complex &c);
    Complex operator / (Complex &c);
    Complex(double r){real=r,imag=0;}
    friend Complex operator+(Complex &c1, Complex &c2);
    //operator double(){return real;}
    void display();
private:
    double real;
    double imag;
};

Complex Complex::operator*(Complex &c)
{
    return (Complex(real*c.real, imag*c.imag));
}

Complex Complex::operator/(Complex &c)
{
    return (Complex(real/c.real, imag/c.imag));
}

Complex Complex::operator-(Complex &c)
{
    return (Complex(real-c.real, imag-c.imag));
}

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

Complex operator + (Complex &c1,Complex &c2)
{
    return (Complex(c1.real+c2.real, c1.imag+c2.imag));
}

int main(void)
{
    Complex c1(2,4), c2(3,6), c3;
    double i = 7.0;
    c1.display(), c2.display();
    c3 = c2 + i;
    c3.display();
    c3 = c2 - c1;
    c3.display();
    c3 = c2 * c1;
    c3.display();
    c3 = c2 / c1;
    c3.display();

    return 0;
}
  • 写回答

1条回答

  • cold_windx 2019-09-12 22:56
    关注

    const &能正常调用,运算符重载参数一般都使用const &
    至于为啥Complex &不行就不知道了,编译器似乎不认这个函数

    Complex operator + (const Complex &c1, const Complex &c2);
    
    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建