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;i
cout<
/*****************************************************************************/
/*
函数名称:additem
功能描述:增加集合元素
修改记录:
*/
errcode set::additem(int elem)
{
for(int i=0;i
return noerr;
if(card<16)
{
elems[card++]=elem;
return noerr;
}
else
return overflow;
}
/*****************************************************************************/
/*
函数名称:operator &
功能描述:声明重载运算符&,判断某一整数是否属于某一集合
修改记录:
*/
bool operator &(int elem,set set1)
{
for(int i=0;i
return true;
return false;
}
/*****************************************************************************/
/*
函数名称:operator ==
功能描述:声明重载运算符==,判断两个集合是否相等
修改记录:
*/
bool operator ==(set set1,set set2)
{
if(set1.card !=set2.card ) //两个集合个数不等,必不相等
return false;
for(int i=0;i
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;i
{
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;i
return res;
}
/*****************************************************************************/
/*
函数名称:operator <
功能描述:声明重载运算符<,判断某一集合是否为另一集合的纯子集
修改记录:
*/
bool operator <(set set1,set set2)
{
if(set1.card
else
return false;
}
/*****************************************************************************/
/*
函数名称:operator <=
功能描述:声明重载运算符<=,判断某一集合是否为另一集合的子集
修改记录:
*/
bool operator <=(set set1,set set2)
{
if(set1.card >set2.card )
return false;
for(int i=0;i
return false;
return true;
}
/*****************************************************************************/
void jiemian();
void tuichu();
void setcompute();
/************************************************************************/
/* main函数 */
/************************************************************************/
int main()
{
jiemian();
return 0;
}
/************************************************************************/
/* 主界面函数,实现了界面及函数调用 */
/************************************************************************/
void jiemian()
{
int i;
cout<
{
cout<
0.退出;"<
cin>>i;
cout<
if(i>=0 && i<=1)
{
switch(i)
{
case 1:
setcompute();
break;
case 0:
tuichu();
break;
}
}
else
{
cout<<"输入错误!";
cout<<"重新输入"<
}
}
/************************************************************************/
/* 退出函数 */
/************************************************************************/
void tuichu()
{
cout<<"---------------------------------------------------------------"<
}
/************************************************************************/
/* 集合计算函数 */
/************************************************************************/
void setcompute()
{
int j;
cout<<"请选择您的集合计算内容:"<
cin>>j;
cout<
{
//判断输入,0退出
if(j>=0 && j<=3)
{
int r1,r2,val,n;
set set1,set2,set3;
cout<<"请输入第一个集合的元素个数:";
cin>>r1;
cout<<"请输入第二个集合的元素个数:";
cin>>r2;
cout<<"请输入第一个集合的元素:"<
{
cout<<"第"<
set1.additem (val);
}
set1.print ();
cout<<"请输入二个集合的元素:"<
{
cout<<"第"<
set2.additem (val);
}
set2.print ();
switch(j)
{
case 1:
set3=set1*set2;
cout<<"第一个集合为:"<
cout<<"第二个集合为:"<
cout<<"交集为:"<
break;
case 2:
set3=set1+set2;
cout<<"第一个集合为:"<
cout<<"第二个集合为:"<
cout<<"并集为:"<
break;
case 3:
cout<<"第一个集合为:"<
cout<<"第二个集合为:"<
if(set1
}
}
else
cout<<"按键错误,请重新选择!"<
cin>>j;
cout<
}