资源描述
c++ 运算符重载-集合运算.txt30生命的美丽,永远展现在她的进取之中;就像大树的美丽,是展现在它负势向上高耸入云的蓬勃生机中;像雄鹰的美丽,是展现在它搏风击雨如苍天之魂的翱翔中;像江河的美丽,是展现在它波涛汹涌一泻千里的奔流中。#include<iostream.h>
#include <math.h>
#include <iomanip.h>
/*****************************************************************************/
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<card-1;i++)
cout<<elems[i]<<",";
if(card>0)
cout<<elems[card-1]<<"}\n";
}
/*****************************************************************************/
/*
函数名称:additem
功能描述:增加集合元素
修改记录:
*/
errcode set::additem(int elem)
{
for(int i=0;i<card;i++)
if(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;i<set1.card ;++i)
if(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;i<set1.card;i++)
if(!(set1.elems [i]& set2)) //调用&定义
return false;
return true;
}
/*****************************************************************************/
/*
函数名称:operator !=
功能描述:声明重载运算符!=,判断两个集合是否不等
修改记录:
*/
bool operator !=(set set1,set set2)
{
if(set1== set2)
return false;
else
return true;
}
/*****************************************************************************/
/*
函数名称:operator *
功能描述:声明重载运算符*,求两个集合的交
修改记录:
*/
set operator *(set set1,set set2)
{
set res;
for(int i=0;i<set1.card ;i++)
for(int j=0;j<set2.card ;j++)
if(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;i<set2.card ;i++)
res.additem (set2.elems [i]); //将set2中的元素追加到res中
return res;
}
/*****************************************************************************/
/*
函数名称:operator <
功能描述:声明重载运算符<,判断某一集合是否为另一集合的纯子集
修改记录:
*/
bool operator <(set set1,set set2)
{
if(set1.card<set2.card && set1<=set2)
return true;
else
return false;
}
/*****************************************************************************/
/*
函数名称:operator <=
功能描述:声明重载运算符<=,判断某一集合是否为另一集合的子集
修改记录:
*/
bool operator <=(set set1,set set2)
{
if(set1.card >set2.card )
return false;
for(int i=0;i<set1.card ;i++)
if(!(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<<endl<<endl;
cout<<"---------------------------------------------------------------"<<endl;
cout<<"* *"<<endl;
cout<<" 欢迎进入用运算符重载实现特殊计算器程序 "<<endl;
cout<<"* *"<<endl;
cout<<"----------------------------------------------------------------"<<endl;
while(i)
{
cout<<endl<<endl;
cout<<"请选择您的计算类型:"<<endl<<endl;
cout<<" 1.集合计算;"<<endl;
cout<<" 0.退出;"<<endl;
cout<<"请选择按键(0-1):";
cin>>i;
cout<<endl;
//判断输入,0退出
if(i>=0 && i<=1)
{
switch(i)
{
case 1:
setcompute();
break;
case 0:
tuichu();
break;
}
}
else
{
cout<<"输入错误!";
cout<<"重新输入"<<endl;
}
}
}
/************************************************************************/
/* 退出函数 */
/************************************************************************/
void tuichu()
{
cout<<"---------------------------------------------------------------"<<endl;
cout<<"* *"<<endl;
cout<<" 谢谢使用运算符重载实现特殊计算器程序,再见! "<<endl;
cout<<"* *"<<endl;
cout<<"----------------------------------------------------------------"<<endl;
}
/************************************************************************/
/* 集合计算函数 */
/************************************************************************/
void setcompute()
{
int j;
cout<<"请选择您的集合计算内容:"<<endl<<endl;
cout<<" 1.两个集合的交集;"<<endl;
cout<<" 2.两个集合的并集;"<<endl;
cout<<" 3.一个集合是否为另一个集合的子集;"<<endl;
cout<<" 0.返回主界面;"<<endl;
cout<<"请选择按键(0-3):";
cin>>j;
cout<<endl;
while(j)
{
//判断输入,0退出
if(j>=0 && j<=3)
{
int r1,r2,val,n;
set set1,set2,set3;
cout<<"请输入第一个集合的元素个数:";
cin>>r1;
cout<<"请输入第二个集合的元素个数:";
cin>>r2;
cout<<"请输入第一个集合的元素:"<<endl;
for(n=1;n<=r1;n++)
{
cout<<"第"<<n<<"个元素为:";
cin>>val;
set1.additem (val);
}
set1.print ();
cout<<"请输入二个集合的元素:"<<endl;
for(n=1;n<=r2;n++)
{
cout<<"第"<<n<<"个元素为:";
cin>>val;
set2.additem (val);
}
set2.print ();
switch(j)
{
case 1:
set3=set1*set2;
cout<<"第一个集合为:"<<endl;
set1.print ();
cout<<"第二个集合为:"<<endl;
set2.print ();
cout<<"交集为:"<<endl;
set3.print ();
break;
case 2:
set3=set1+set2;
cout<<"第一个集合为:"<<endl;
set1.print ();
cout<<"第二个集合为:"<<endl;
set2.print ();
cout<<"并集为:"<<endl;
set3.print ();
break;
case 3:
cout<<"第一个集合为:"<<endl;
set1.print ();
cout<<"第二个集合为:"<<endl;
set2.print ();
if(set1<set2)
cout<<"第一个集合为第二个集合的子集!"<<endl;
break;
}
}
else
cout<<"按键错误,请重新选择!"<<endl;
cout<<endl;
cout<<"请选择您的集合计算内容:"<<endl<<endl;
cout<<" 1.两个集合的交集;"<<endl;
cout<<" 2.两个集合的并集;"<<endl;
cout<<" 3.一个集合是否为另一个集合的子集;"<<endl;
cout<<" 0.返回主界面;"<<endl;
cout<<"请选择按键(0-3):";
cin>>j;
cout<<endl;
}
}
展开阅读全文