| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 795 人关注过本帖
标题:请问隐式转换的问题
只看楼主 加入收藏
ysmashiamaro
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-8-21
收藏
 问题点数:0 回复次数:5 
请问隐式转换的问题

我的源文件如下:

#include <iostream.h>

class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(double r){real=r;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator + (Complex c2);/*改为Complex operator + (Complex &c2)就出现编译错误*/
void display();
private:
double real;
double imag;
};

Complex Complex::operator + (Complex c2)/*也改为Complex operator + (Complex &c2)*/
{return Complex(real+c2.real,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;
}

我不明白为什么会这样,我用的是VC6.0编译器,有哪位高人帮我解答一下,万分感谢。

搜索更多相关主题的帖子: double Complex private display 
2007-08-21 20:34
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
根据你问的,相信你已经知道类类型在单形参构造函数调用时的隐士转换。

你的问题是 &

我写个代码你就明白了

const int &i1 = 100; //允许const引用指向右值
int &i2 = 100; //不允许非const引用指向右值

所以你要想引用,那就再加上个const修饰 const Complex &c2


ps:LZ的复数类不大对哦,私有怎么也是double?应该是int吧。
你输出下你的结果,有 (5.5,4i)这样的???

Fight  to win  or  die...
2007-08-21 22:05
使者
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-7-24
收藏
得分:0 
这是因为Complex operator + (Complex c2)的这种参数方式,在调用时,遇到如2.5时,会自动调用Complex(double r){real=r;imag=0;};
如果没有这样的定义,如去掉Complex(double r){real=r;imag=0;}这一行.两种方式都会出错.你可以试一下.
而Complex operator + (Complex &c2)这种的实参只能是Complex类型.
不知道我有没有说清楚.
2007-08-21 22:27
neverDie
Rank: 1
等 级:新手上路
威 望:1
帖 子:123
专家分:0
注 册:2007-5-5
收藏
得分:0 
[QUOTE]而Complex operator + (Complex &c2)这种的实参只能是Complex类型.[/QUOTE]

为什么,你没说清楚关键啊!


2楼bz的太深奥了,啥米意思?

2007-08-22 00:38
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

因为Complex & c=2.5;不允许这样。也就是说没有让2.5直接转变为Complex&c的函数
你的隐士转换只能为Complex c=2.5;
因此当Complex operator + (Complex &c2)时,Complex &c2=2.5失败


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-08-28 21:53
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
c3=c1+2.5;
没有匹配的加法运算,所以调用了Complex的单参数构造函数,产生了一个由2.5构造出来了临时副本,然后在调用成员函数Complex operator + (Complex c2);
你可以认为临时对象都是const的,所以不能将一个const Complex赋值给一个Complex&
2007-08-29 01:09
快速回复:请问隐式转换的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020181 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved