成员运算符重载的问题

langzimaomao 2003-08-19 11:13:50
编这样一个程序:定义一个复数类,完成两复数实部与实

部相加,虚部与虚相加功能。目的是练习运算符函数。

#include<iostream.h>
class complex
{
private:
double real;
double imag;
public:
complex(double r=0,double i=0);
void print();
complex operator+(complex c); //重载了+的运算符函数
};
complex::complex(double r,double i)
{
real=r;
imag=i;
}
void complex::print()
{
cout<<real;
if(imag>0)
cout<<"+";
if(imag!=0)
cout<<imag<<"i"<<endl;
};
complex complex::operator +(complex c) //前面为什么还要加上一个"complex"
{
complex temp;
temp.real=real+c.real;
temp.imag=imag+c.imag;
return temp;
}

main()
{
complex ob1(3,9),ob2(4,6),ob3;
ob3=ob1+ob2;
ob3.print();
return 0;
}

我想问的是:重载运算符+函数,在类外定义时,前面的第一个complex是什么意思

它既然属于成员函数,只须缀上类名即可,为什么要缀上两个类名

...全文
41 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
eric8231 2003-08-20
  • 打赏
  • 举报
回复
第一个 complex 是返回值类型, 第二个 complex:: 是域解析
fireseed 2003-08-20
  • 打赏
  • 举报
回复
没有;号则下面的那句friend complex operator +(complex a,complex b);被当做声明,所以无效,所以这个函数没有被成功的声明为那个类的友员。

即然这个函数不是complex类的友员,当然不能访问complex类的私有成员了
2608 2003-08-19
  • 打赏
  • 举报
回复
complex complex::operator +(complex c) //前面为什么还要加上一个"complex"
{
complex temp; // 注意这里
temp.real=real+c.real;
temp.imag=imag+c.imag;
return temp; // 以及这里
}

如下一个简单的例子:
int add(int a,int b)
{
int temp;
temp = a + b;
return temp
}

明白了?

hellobcb 2003-08-19
  • 打赏
  • 举报
回复
前一个是类型,后一个是作用域!
LoopyPuzzle 2003-08-19
  • 打赏
  • 举报
回复
那个是类型说明啊。你既然定义了complex类,当然可以把它作为自定义类型使用了。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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