定义一个集合类String,处理整形数组,通过成员函数重载运算符判断一个数是否属于一个函数,通过友元重载运算服判断两个集合是否相同,集合中的所有元素相同,但顺序可不同,具体要求如下
题目要求
定义一个集合类String,处理整形数组,通过成员函数重载运算符判断一个数是否属于一个函数,通过友元重载运算服判断两个集合是否相同,集合中的所有元素相同,但顺序可不同
(1) 私有数据成员
int* a; 数据成员存放整形数组集合为数组中的所有元素
int len; 数据成员数组的长度
(2) 公有成员函数
SET(int* p, int n); 构造函数与形参初始化数据成员
int operator ==(int m); 重载函数判断m是否属于当前对象所属的集合
friend int operator ==(SET& s1, SET& s2); 重载函数判断s1和s2所属的集合是否相同
void print(); 输出集合函数
~SET(); 释放动态内存
(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>
#include <iomanip>
using namespace std;
class SET
{
private:
int* a;
int 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)
{
a = p;
len = n;
}
int SET::operator ==(int m)
{
for (int i = 0; i < len; i++)
{
if (*a == m)
return 1;
a++;
}
return 0;
}
int operator ==(SET& s1, SET& s2)
{
int* b = s2.a,i,j;
if (s1.len != s2.len)
{
return 0;
}
for (i = 0; i < s1.len; i++)
{
for (j = 0; j < s1.len; j++)
{
if (*s1.a == *s2.a)
*s2.a = -1;
s2.a++;
}
s1.a++;
s2.a=b;
}
s2.a=b;
int flag = 1;
for (i = 0; i < s2.len; i++)
{
if (*b!= -1)
flag = 0;
b++;
}
return flag;
}
void SET::print()
{
int i;
int* b=a;
for (i = 0; i < len; i++)
{
cout << setw(4) << *b;
b++;
}
cout << endl;
}
SET::~SET()
{
delete[] a;
}
int main()
{
int a[5] = { 1,2,3,4,5 }, b[5] = { 1,2,3,4,5};
int c[6] = { 1,2,3,4,5,6 }, d[6] = { 1,3,5,7,9 };
SET A(a, 5), B(b, 5), C(c, 6), D(d, 5);
cout << "a:";
A.print();
cout << "b:";
B.print();
cout << "c:";
C.print();
cout << "d:";
D.print();
if (operator ==(A, B))
cout << "a==b" << endl;
else
cout << "a!=b" << endl;
if (operator ==(A, C))
cout << "a==c" << endl;
else
cout << "a!=c" << endl;
if (operator ==(A, D))
cout << "a==d" << endl;
else
cout << "a!=d" << endl;
return 0;
}