12.定义一个集合类SET,处理整型数组。通过成员函数重载运算符“==”,判断一个数是否属于集合;通
过友元重载运算符“==”,判断两个集合是否相同,即集合中的所有元素相同,但顺序可不同。具体要求如下:
(1)私有数据成员:
int *a; //数据成员,存放整型数组,集合为数组中的所有元素
int len; //数据成员,数组的长度
(2)公有成员函数:
SET(int*p,intn):构造函数,以形参初始化数据成员;
int operator==(intm):重载函数,判断m是否属于当前对象所属的集合;
friend int operator==(SET&s1.SET&s2):重载函数,判断s1和s2所属的集合是否相同,可在该函数中调用类的其他函数;
void print():输出集合;
~SETO:析构函数,释放动态内存。
(3)对所定义的类进行测试。以集合a{1,2,3,4,5}、集合b{1,2,3,4,5}、集合c{1,2,3,4,5,6}、集合d{1,3,5,7,9}
为测试数据,判断a与b、a与c、a与d之间是否相同。
#include<iostream>
using namespace std;
class SET
{
private:
int* a;
int len;
public:
SET(int* p, int len)
{
this->len = len;
a = new int[len];
for (int i = 0; i < len; i++)
{
a[i] = p[i];
}
}
~SET(){delete[]a;}
int operator==(int num)
{
for (int i = 0; i < this->len; i++)
{
if (a[i] == num)
return 1;
}
return 0;
}
friend int operator==(SET& s1, SET& s2)
{
if (s1.len != s2.len)
return 0;
for (int i = 0; i < s1.len; i++)
{
if (!(s2 == s1.a[i]))
return 0;
}
return 1;
}
void print()
{
for (int i = 0; i < len; i++)
cout << a[i] << " ";
cout << endl;
}
};
int main()
{
int arr1[5] = { 1,2,3,4,5 }; int arr2[5] = { 1,2,3,4,5 };
int arr3[6] = { 1,2,3,4,5,6 };int arr4[5] = { 1,3,5,7,9 };
SET a(arr1, 5), b(arr2, 5), c(arr3, 6), d(arr4, 5);
int num; cin >> num;
if (d == num)
cout << num << "在子集d内" << endl;
else
cout << num << "不在子集d内" << endl;
cout << "--------";
if (a == b)
{
cout << "子集相同" << endl; cout << "a的子集:"; a.print(); cout << "b的子集:"; b.print();
}
else
{
cout << "子集不同" << endl; cout << "a的子集:"; a.print(); cout << "b的子集:"; b.print();
}
cout << "--------";
if(b==d)
{
cout << "子集相同" << endl; cout << "b的子集:"; b.print(); cout << "d的子集:"; d.print();
}
else
{
cout << "子集不同" << endl; cout << "b的子集:"; b.print(); cout << "d的子集:"; d.print();
}
system("pause");
}