关于C++隐式类型转换的一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 13:33:07
#include<iostream>
#include<cstring>
#include <conio.h>
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);
friend ostream& operator<<(ostream& out, complex const& com);
private:
double real;
double image;
};
complex complex::operator+(complex& c2)
{ return complex(real+c2.real,image+c2.image);}
ostream& operator<<(ostream& out,complex const& com)
{
out<<"real:"<<com.real<<"image:"<<com.image<<endl;
return out;
}
int main()
{
complex c1(2,3),c2(2,-4),c3,c4;
double d;
c3=c1+c2;

c4=c2+2.0;

c4=c2+2.0
这句话有问题,
是complex+double,没有对应的+的运算符重载,当然有错了.
你说的那种转换其实很有限,不要总是期待这种隐式的类型转换.特别是在使用重载的时候再加上隐式转换的,一些编译器会先认定类型看隐式转换.

你可以complex内定义一个转换函数
转换为complex类型