把求差集和并集的逻辑再+和-函数中实现就可以了。
集合中的数据由键盘输入,运行结果如下:
代码:
#include<iostream>
#include<string>
using namespace std;
#define MAX 10
class set
{
public:
set() { len = 0; }//构造函数
void input(int d);//向集合添加元素
int length() { return len; }//返回集合中元素个数
int getd(int i);//返回集合中位置i的元素
void disp();//显示集合元素
set operator+(set s1);//重载+,实现集合的并集运算
set operator-(set s1);//重载-,实现集合的差集运算
protected:
int len;//集合中元素个数
int s[MAX];
};//集合中元素
void set::input(int d)
{
s[len++] = d;
}
int set::getd(int i) { return s[i]; }
void set::disp()
{
for (int i = 0; i < len; i++)
{
if (i < len - 1)
cout << s[i] << " ";
else
cout << s[i] << endl;
}
}
set set::operator+(set s1)
{
set sout;
int i = 0, j = 0;
int lens1 = s1.length();
//先把this的数据添加到sout中
for (i = 0; i < len; i++)
{
sout.input(s[i]);
}
//再把s1中的数据添加到sout中
for (i = 0; i < lens1; i++)
{
for (j = 0; j < len; j++)
{
if (this->getd(j) == s1.getd(i))
break;
}
if (j == len)
sout.input(s1.getd(i));
}
return sout;
}
//重载-,实现集合的差集运算
set set::operator-(set s1)
{
set sout;
int i, j;
int lens1 = s1.length();
for (i = 0; i < len; i++)
{
for (j = 0; j < lens1; j++)
{
if (s1.getd(j) == this->getd(i))
break;
}
if (j == lens1)
sout.input(this->getd(i));
}
return sout;
}
int main()
{
set s1, s2;
int len1, len2, t;
cout << "请输入集合1的数据个数:";
cin >> len1;
cout << "请输入集合1的数据:";
for (int i = 0; i < len1; i++)
{
cin >> t;
s1.input(t);
}
cout << "请输入集合2的数据个数:";
cin >> len2;
cout << "请输入集合2的数据:";
for (int i = 0; i < len2; i++)
{
cin >> t;
s2.input(t);
}
//输出
cout << "集合s1中的元素个数是:" << s1.length() << "其中含有的元素是";
s1.disp();
cout << "集合s2中的元素个数是:" << s2.length() << "其中含有的元素是";
s2.disp();
set sout1 = s1 + s2;
cout << "集合s1和集合s2的并集为s1+s2,元素个数是" << sout1.length() << "其中含有的元素是";
sout1.disp();
set sout2 = s1 - s2;
cout << "集合s1和集合s2的差集为s1-s2,元素个数是" << sout2.length() << "其中含有的元素是";
sout2.disp();
return 0;
}