|
![]() | 作者: zhoen889 [zhoen889]
![]() |
登录 |
#include<iostream.h> #include<math.h> class SUM { private: float Xrecord;//复数实部 float Yrecord;//复数虚部 public: SUM(){}; SUM(float x,float y):Xrecord(x),Yrecord(y){}; SUM operator +(SUM a);//重载运算符 SUM operator -(SUM b);//重载运算符 void disp(); void disp1(); }; SUM SUM::operator +(SUM a) { SUM s; s.Xrecord=Xrecord+a.Xrecord; s.Yrecord=Yrecord+a.Yrecord; return s; } SUM SUM::operator -(SUM b) { SUM s; s.Xrecord=Xrecord-b.Xrecord; s.Yrecord=Yrecord-b.Yrecord; return s; } void SUM::disp() { cout<<"复数的和是:"; cout<<Xrecord<<"+"<<Yrecord<<"*"<<"i"<<endl; } void SUM::disp1() { cout<<"复数的差是:"; cout<<Xrecord<<"-"<<Yrecord<<"*"<<"i"<<endl; } void main() { SUM *SM[2]; SUM *S; S=new SUM(0,0); float x; float y; int i; int p=0; for(i=0;i<2;i++) { cout<<"请输入复数实部:"; cin>>x; cout<<"请输入复数虚部:"; cin>>y; SM[p++]=new SUM(x,y); } *S=*SM[0]+*SM[1]; S->disp(); *S=*SM[0]-*SM[1]; S->disp1(); } public下面的第一个成员函数即把构造函数重载。在这个程序中,当我不加它时,会有error出现,按理说这是正确的。但是最近我又在做另外一个程序时候,把它无意间去了,却没有出现error。我很纳闷,虽然程序运行成功。 我不知道为什么,请问构造函数重载是必须的吗? 那它又有什么用处呢?请高手指教! 谢谢!!! |
地主 发表时间: 11/28 19:49 |
![]() | 回复: lwei889 [lwei889] ![]() |
登录 |
函数重载也不是一定的,如果你要调用一个子函数,也可以同样实现此功能,但是不用重载也不调用子函数,肯定是不行的。 至于函数构造重载,我想用它则是体现了c++的特点,因为在c语言里是没有重载的! |
B1层 发表时间: 11/28 20:55 |
![]() | 回复: ziaichen [ziaichen] ![]() |
登录 |
如果说明中有多个构造函数,一般他们有不同的参数表很少的函数体,系统在调用构造函数是会按照一般的函数重载规则来选择其中之一,因此你不写,当然会有错误的呀! |
B2层 发表时间: 11/30 11:57 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号