关于形参列表中引用的问题(在加法运算符重载环境下)

为了使一个定义在类中的复数能够和一个整型数据直接通过加法运算符相加,写了几个重载函数,

#include<iostream>
using namespace std;
class Complex
{public:
    Complex(){real=0;image=0;}
    Complex(double r,double i){real=r;image=i;}//初始化的构造函数
    Complex(double r){real=r;image=0;}//转换构造函数
    Complex operator+(Complex &c2);//在一个复数左加另一个复数的情况下
    Complex operator+(double &i);//在一个复数左加一个双精度浮点数的情况下
    friend Complex operator+(double &i,Complex &c2);//友元函数,在一个浮点数加左加一个复数的情况下
    void display();//输出函数
private:
    double real;
    double image;
};

Complex operator+(double &i,Complex &c2)
{return Complex(i+c2.real,c2.image);}

Complex Complex::operator+(Complex &c2)
{return Complex(real+c2.real,image+c2.image);}

Complex Complex::operator+(double &i)
{return Complex(i+real,image);}//重载

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

int main()
{
    Complex c1(2,-3),c2(4,5),c3;
    c3=c1+2.5;//报错段
    c3.display();
    return 0;
}

但是编译器一直报错,提示不能直接将一个类中的数据与浮点数直接相加。

起初百思不得其解,甚至一度怀疑是浮点型不能参与重载,直到重新翻了引用的定义才明白。

引用是作为变量的别名,而我在重载时用的是引用,实际使用时给的却是一个常量,所以不会调用重载函数。

在把&引用标识符去掉之后,问题就解决了。

#include<iostream>
using namespace std;
class Complex
{public:
    Complex(){real=0;image=0;}
    Complex(double r,double i){real=r;image=i;}//初始化的构造函数
    Complex(double r){real=r;image=0;}//转换构造函数
    Complex operator+(Complex &c2);//在一个复数左加另一个复数的情况下
    Complex operator+(double i);//在一个复数左加一个双精度浮点数的情况下
    friend Complex operator+(double i,Complex &c2);//友元函数,在一个浮点数加左加一个复数的情况下
    void display();//输出函数
private:
    double real;
    double image;
};

Complex operator+(double i,Complex &c2)
{return Complex(i+c2.real,c2.image);}

Complex Complex::operator+(Complex &c2)
{return Complex(real+c2.real,image+c2.image);}

Complex Complex::operator+(double i)
{return Complex(i+real,image);}//重载

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

int main()
{
    Complex c1(2,-3),c2(4,5),c3;
    c3=c1+2.5;//成功
    c3.display();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值