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 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据