类型转换构造函数隐式调用与运算符重载参数类型的不对应

来源:互联网 发布:esp8266的单片机教程 编辑:程序博客网 时间:2024/05/17 07:48


学习谭浩强《C++程序设计》运算符重载章节时遇到了以下问题:

在自定义类Complex中定义了类型转换构造函数,同时,定义了以Complex类对象的引用为形参的运算符+重载的友元函数,在执行类型隐式转换时出错。

错误代码如下:

#include <iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;} //默认构造函数,没有形参Complex(double r){real=r;imag=0;} //定义转换构造函数,一个形参Complex(double r,double i){real=r;imag=i;} //初始化构造函数,两个形参 friend Complex operator+(Complex &c1,Complex &c2); //运算符重载的友元函数 void display();private: double real;double imag;};Complex operator+(Complex &c1,Complex &c2) //定义运算符+重载的函数{return Complex(c1.real+c2.real,c1.imag+c2.imag);}void Complex::display() //定义输出函数{cout<<"("<<real<<"+"<<imag<<"i)"<<endl;}int main(){ Complex c1(3,4),c2(5,-10),c3; c3=c1+2.5;c3.display(); return 0;}
其实是类型对应发生了错误。
修改方法一:只需把
friend Complex operator+(Complex &c1,Complex &c2);  //运算符重载的友元函数

        Complex operator+(Complex &c1,Complex &c2)   //定义运算符+重载的函数

这两句代码中的引用符号“&”删去即可。


修改方法二:

显式调用转换函数:

c3=c1+Complex(2.5);


参考:http://bbs.bccn.net/thread-350819-1-1.html


0 0
原创粉丝点击