标题:类类型转换
只看楼主
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
 问题点数:0 回复次数:7 
类类型转换

#include <iostream>
using namespace std;
class Complex
{public:
Complex(double r=0,double i=0):real(r),imag(i){}
Complex(int r){real=r;imag=0;}
friend Complex operator+(Complex a,Complex b);/*friend Complex operator+(Complex &a,Complex &b);这样写为什么会出错啊*/
void display();
private:
double real;
double imag;
};

Complex operator+(Complex a,Complex b)
{Complex c;
c.real=a.real+b.real;
c.imag=a.imag+b.imag;
return c;}

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

int main()
{Complex c1(1.0,2.4),c2(2.3,4),c3;
c3=6+c1; /*如果我这里改成c3=c1+c2就不会错为什么呢*/
cout<<"c1+c2=";c3.display();
return 0;
}

搜索更多相关主题的帖子: Complex real double operator 类型 
2006-06-15 17:29
stylev
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2006-5-30
得分:0 
#include <iostream>
using namespace std;
class Complex
{public:
    Complex(double r=0,double i=0):real(r),imag(i){}
    Complex(int r){real=r;imag=0;}
  friend Complex operator+(const Complex &a, const Complex &b);
    void display();
private:
    double real;
    double imag;
};

Complex operator+(const Complex &a, const Complex &b)
{
Complex c;
c.real=a.real+b.real;
c.imag=a.imag+b.imag;
return c;
}

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

int main()
{Complex c1(1.0,2.4),c2(2.3,4),c3;
c3=6+c1;
cout<<"c1+c2=";
c3.display();
return 0;
}


E-mail/MSN: stylev@
2006-06-15 18:21
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 
friend Complex operator+(const Complex &a, const Complex &b);
为什么用const

2006-06-15 18:47
stylev
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2006-5-30
得分:0 
你说哪种对?

operator +(6, c1);
operator +((Complex(6), c1);

编译器明显要处理能第二种才会编译通过,第一种则类型不匹配.
只有const修饰的对象才能自动调用Complex(double x)构造函数

E-mail/MSN: stylev@
2006-06-15 21:51
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 
只有const修饰的对象才能自动调用Complex(double x)构造函数
为什么 我还是不大明白,const不是定义常量的吗?这样一来const Complex &a, const Complex &b不变成两个常对象了吗?有什么意义呢?

2006-06-15 22:31
stylev
Rank: 1
等 级:新手上路
威 望:1
帖 子:136
专家分:0
注 册:2006-5-30
得分:0 
c3=6+c1;
编译器这行认为
c3 = operator + (complex(6), c1);
这里complex(6)会生成一个临时对象,而临时对象都是右键.而右键都是const

当形参是指针或引用的时候,如果实参是个const.那么形参也必须是const

E-mail/MSN: stylev@
2006-06-15 23:39
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
当形参是指针或引用的时候,如果实参是个const.那么形参也必须是const

支持~!

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-16 00:26
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 
这里complex(6)会生成一个临时对象,而临时对象都是右键.而右键都是const
。。。。
我理解是根据变量定义的理解
变量定义是有名称,可寻址,可修改
这里因为没有名字,不能寻址,不可修改
所以是常量
又因为这里用到数据类型
所以只能是const

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-06-16 13:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-72554-1-1.html




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

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