c++ 运算符重载-集合运算

#include
#include
#include
/*****************************************************************************/
enum errcode {noerr,overflow};
//定义集合类
class set
{
public:
void print(); //显示输出集合元素
set(){card=0;}
virtual ~set();
errcode additem(int); //增加集合元素
friend bool operator &(int,set); //声明重载运算符&,判断某一整数是否属于某一集合
friend bool operator ==(set,set); //声明重载运算符==,判断两个集合是否相等
friend bool operator !=(set,set); //声明重载运算符!=,判断两个集合是否不等
friend set operator *(set,set); //声明重载运算符*,求两个集合的交
friend set operator +(set,set); //声明重载运算符+,求两个集合的并
friend bool operator <(set,set); //声明重载运算符<,判断某一集合是否为另一集合的纯子集
friend bool operator <=(set,set); //声明重载运算符<=,判断某一集合是否为另一集合的子集

private:
int elems[16];
int card;
};


/*****************************************************************************/
// 集合类的各个成员函数的具体定义

set::~set()
{
}
/*****************************************************************************/
/*
函数名称:print
功能描述:显示复数
修改记录:
*/
void set::print()
{
cout<<"{";
for(int i=0;icout<if(card>0)
cout<}
/*****************************************************************************/
/*
函数名称:additem
功能描述:增加集合元素
修改记录:
*/
errcode set::additem(int elem)
{
for(int i=0;iif(elems[i]==elem)
return noerr;
if(card<16)
{
elems[card++]=elem;
return noerr;
}
else
return overflow;
}
/*****************************************************************************/
/*
函数名称:operator &
功能描述:声明重载运算符&,判断某一整数是否属于某一集合
修改记录:
*/
bool operator &(int elem,set set1)
{
for(int i=0;iif(set1.elems[i]==elem)
return true;
return false;
}
/*****************************************************************************/
/*
函数名称:operator ==
功能描述:声明重载运算符==,判断两个集合是否相等
修改记录:
*/
bool operator ==(set set1,set set2)
{
if(set1.card !=set2.card ) //两个集合个数不等,必不相等
return false;
for(int i=0;iif(!(set1.elems [i]& set2)) //调用&定义
return false;
return true;
}
/*****************************************************************************/
/*
函数名称:operator !=
功能描述:声明重载运算符!=,判断两个集合是否不等
修改记录:
*/
bool operator !=(set set1,set set2)
{
if(set1== set2)
return fal

se;
else
return true;
}
/*****************************************************************************/
/*
函数名称:operator *
功能描述:声明重载运算符*,求两个集合的交
修改记录:
*/
set operator *(set set1,set set2)
{
set res;
for(int i=0;ifor(int j=0;jif(set1.elems [i]==set2.elems [j])
{
res.elems [res.card ++]= set1.elems [i];
break;
}
//取set1中的每一个元素判断是否属于set2,若属于则加入到res中
return res;
}
/*****************************************************************************/
/*
函数名称:operator +
功能描述:声明重载运算符+,求两个集合的并
修改记录:
*/
set operator +(set set1,set set2)
{
set res=set1;
for(int i=0;ires.additem (set2.elems [i]); //将set2中的元素追加到res中
return res;
}
/*****************************************************************************/
/*
函数名称:operator <
功能描述:声明重载运算符<,判断某一集合是否为另一集合的纯子集
修改记录:
*/
bool operator <(set set1,set set2)
{
if(set1.cardreturn true;
else
return false;
}
/*****************************************************************************/
/*
函数名称:operator <=
功能描述:声明重载运算符<=,判断某一集合是否为另一集合的子集
修改记录:
*/
bool operator <=(set set1,set set2)
{
if(set1.card >set2.card )
return false;
for(int i=0;iif(!(set1.elems [i] & set2))
return false;
return true;
}


/*****************************************************************************/

void jiemian();
void tuichu();
void setcompute();
/************************************************************************/
/* main函数 */
/************************************************************************/
int main()
{
jiemian();
return 0;

}
/************************************************************************/
/* 主界面函数,实现了界面及函数调用 */
/************************************************************************/
void jiemian()
{
int i;
cout<cout<<"---------------------------------------------------------------"<cout<<"* *"<cout<<" 欢迎进入用运算符重载实现特殊计算器程序 "<cout<<"* *"<cout<<"----------------------------------------------------------------"<while(i)
{
cout<cout<<"请选择您的计算类型:"<cout<<" 1.集合计算;"<cout<<"

0.退出;"<cout<<"请选择按键(0-1):";
cin>>i;
cout<//判断输入,0退出
if(i>=0 && i<=1)
{
switch(i)
{
case 1:
setcompute();
break;
case 0:
tuichu();
break;
}
}
else
{
cout<<"输入错误!";
cout<<"重新输入"<}
}
}

/************************************************************************/
/* 退出函数 */
/************************************************************************/
void tuichu()
{
cout<<"---------------------------------------------------------------"<cout<<"* *"<cout<<" 谢谢使用运算符重载实现特殊计算器程序,再见! "<cout<<"* *"<cout<<"----------------------------------------------------------------"<
}

/************************************************************************/
/* 集合计算函数 */
/************************************************************************/

void setcompute()
{
int j;
cout<<"请选择您的集合计算内容:"<cout<<" 1.两个集合的交集;"<cout<<" 2.两个集合的并集;"<cout<<" 3.一个集合是否为另一个集合的子集;"<cout<<" 0.返回主界面;"<cout<<"请选择按键(0-3):";
cin>>j;
cout<while(j)
{
//判断输入,0退出
if(j>=0 && j<=3)
{
int r1,r2,val,n;
set set1,set2,set3;
cout<<"请输入第一个集合的元素个数:";
cin>>r1;
cout<<"请输入第二个集合的元素个数:";
cin>>r2;
cout<<"请输入第一个集合的元素:"<for(n=1;n<=r1;n++)
{
cout<<"第"<cin>>val;
set1.additem (val);
}
set1.print ();

cout<<"请输入二个集合的元素:"<for(n=1;n<=r2;n++)
{
cout<<"第"<cin>>val;
set2.additem (val);
}
set2.print ();
switch(j)
{
case 1:
set3=set1*set2;
cout<<"第一个集合为:"<set1.print ();
cout<<"第二个集合为:"<set2.print ();
cout<<"交集为:"<set3.print ();
break;
case 2:
set3=set1+set2;
cout<<"第一个集合为:"<set1.print ();
cout<<"第二个集合为:"<set2.print ();
cout<<"并集为:"<set3.print ();
break;
case 3:
cout<<"第一个集合为:"<set1.print ();
cout<<"第二个集合为:"<set2.print ();
if(set1cout<<"第一个集合为第二个集合的子集!"<break;
}

}
else
cout<<"按键错误,请重新选择!"<cout<cout<<"请选择您的集合计算内容:"<cout<<" 1.两个集合的交集;"<cout<<" 2.两个集合的并集;"<cout<<" 3.一个集合是否为另一个集合的子集;"<cout<<" 0.返回主界面;"<cout<<"请选择按键(0-3):";
cin>>j;
cout<}
}

相关文档
最新文档