论坛: 编程破解 标题: c++中的构造函数重载 复制本贴地址    
作者: 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号