12.定义一个集合类 SET,处理整型数组。通过成员函数重载运算符“==”,判断一个数是否属于集合; 通过友元重载运算符“==”,判断两个集合是否相同,即集合中的所有元素相同,但顺序可不同。
具体要求如下:
- 私有数据成员:
- int *a; //数据成员,存放整型数组,集合为数组中的所有元素
- int len; //数据成员, 数组的长度
- 公有成员函数:
- SET(int *p,int n):构造函数,以形参初始化数据成员;
- int operator = =(int m):重载函数,判断m是否属于当前对象所属的集合;
- friend int operator = =(SET &s1, SET &s2):重载函数,判断s1和s2所属的集合是否相同,可在
该函数中调用类的其他函数; - void print():输出集合;
- ~SET():析构函数,释放动态内存。
- 对所定义的类进行测试。以集合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{
int *a,len;
public:
SET(int *p,int n);
int operator==(int m);
friend int operator==(SET &s1,SET &s2);
void print();
~SET();
};
SET::SET(int *p,int n){
len = n;
a = new int[n];
for(int i=0;i<n;i++){
a[i]=p[i];
}
}
int SET::operator==(int m){
for(int i=0;i<len;i++){
if(m==a[i])return 1;
}
return 0;
}
int operator==(SET &s1,SET &s2){
if(s1.len!=s2.len)return 0;
for(int i=0;i<s1.len;i++){
if(!(s1==s2.a[i]))return 0;
}
return 1;
}
void SET::print(){
for(int i=0;i<len;i++){
cout<<a[i]<<' ';
}
cout<<endl;
}
SET::~SET(){
if(a)delete[]a;
}
int main(){
int 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};
SET s1(a,5),s2(b,5),s3(c,6),s4(d,5);
cout<<"a:";s1.print();
cout<<"b:";s2.print();
cout<<"c:";s3.print();
cout<<"d:";s4.print();
if(s1==s2)cout<<"a==b"<<endl;
else cout<<"a!=b"<<endl;
if(s1==s3)cout<<"a==c"<<endl;
else cout<<"a!=c"<<endl;
if(s1==s4)cout<<"a==d"<<endl;
else cout<<"a!=d"<<endl;
return 0;
}