定义一个集合类String,处理整形数组,通过成员函数重载运算符判断一个数是否属于一个函数,通过友元重载运算服判断两个集合是否相同,集合中的所有元素相同,但顺序可不同

定义一个集合类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;
}












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章