书上的这个程序怎么看不懂啊?是打错了吗?

mbctb 2009-03-17 03:24:13
在看谭浩强的《C++程序设计》(PPT版本电子书)

第10章《运算符重载》开头就举了一个两个复数相加的例子:


#include <iostream>
using namespace std;
class Complex //定义Complex类
{public:
Complex( ){real=0;imag=0;} //定义构造函数
Complex(double r,double i){real=r;imag=i;} //构造函数重载
Complex complex_add(Complex &c2); //声明复数相加函数
void display( ); //声明输出函数
private:
double real; //实部
double imag; //虚部
};

Complex Complex∷complex_add(Complex &c2)
{Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;}

void Complex∷display( ) //定义输出函数
{cout<<″(″<<real<<″,″<<imag<<″i)″<<endl;}

int main( )
{Complex c1(3,4),c2(5,-10),c3; //定义3个复数对象
c3=c1.complex_add(c2); //调用复数相加函数
cout<<″c1=″; c1.display( ); //输出c1的值
cout<<″c2=″; c2.display( ); //输出c2的值
cout<<″c1+c2=″; c3.display( ); //输出c3的值
return 0;
}
运行结果如下:
c1=(3+4i)
c2=(5-10i)
c1+c2=(8,-6i)


我的疑问是:这个函数:Complex Complex∷complex_add(Complex &c2),我的理解是它的参数为一个Complex对象的引用,而返回值也是一个Complex对象。但是问题是函数里面的real和imag是什么?

另外:在这个函数调用的时候也不明白:c3=c1.complex_add(c2); 怎么能用c1.complex_add(c2)的方式调用?c1.后面应该跟complex对象的一个成员,可是现在跟的却是这个函数,也就是一个complex对象,这个是怎么回事?我不明白。

...全文
111 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
na2650945 2009-03-17
  • 打赏
  • 举报
回复
学习。
jssz103b 2009-03-17
  • 打赏
  • 举报
回复
lz类用的少
mbctb 2009-03-17
  • 打赏
  • 举报
回复
多谢各位!是我对C++语法不熟悉造成的,现在完全明白了,谢谢!

mengde007 2009-03-17
  • 打赏
  • 举报
回复
real就是代表着这个对象的成员real。根据题的意思就是c1的成员real.
对于你第二个问题,complex_add(Complex &c2) 不就是c1的函数成员嘛。
mbctb 2009-03-17
  • 打赏
  • 举报
回复
哦,恍然大悟了!原来这是类中的成员函数。非普通函数。明白了!谢谢!

xinhua0910 2009-03-17
  • 打赏
  • 举报
回复
real 是自身的real,就是调用这个方法的对象的real
arong1234 2009-03-17
  • 打赏
  • 举报
回复
这不是书的问题,而是你自己理解问题。一个成员函数访问当前对象的数据成员时是怎么访问的语法你不知道?
这不就是在访问当前对象的real/img么?this指针知道不?
[Quote=引用 1 楼 mbctb 的回复:]
我上面的问题可能没说清楚,就是这个函数的函数体中:

Complex Complex∷complex_add(Complex &c2)
{Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;}

c.real是知道的,c2.real也知道,可是real是什么?
[/Quote]
lizhizhe2000 2009-03-17
  • 打赏
  • 举报
回复
1.函数里面的real和img是调用者的成员变量,在这个main里面也就是c1的real,img

2.很容易明白啊
mbctb 2009-03-17
  • 打赏
  • 举报
回复
我上面的问题可能没说清楚,就是这个函数的函数体中:

Complex Complex∷complex_add(Complex &c2)
{Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;}

c.real是知道的,c2.real也知道,可是real是什么?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧