&&重载实现寻找子集

来源:互联网 发布:it luggage 编辑:程序博客网 时间:2024/06/06 03:43

经此一役,悔不当初。题目虽小,但我深刻的认识到不应该小瞧每一道题目,即使一眼就能看出来思路,但有思路不等于有结果,要坦然、认真的面对每一个问题。

/*建立一个类 Intersection 求两个整数集合的交集。具体要求如下:(1)私有数据成员    int set[20]:用数组空间 set 存储集合。    int len:表示该集合中元素的个数(2)公有成员函数    Intersection(int *s,int l):用 s 初始化集合,用变量 l 初始化其长度。    Intersection( ):把 set 中各元素和长度初始化为 0。    int f(int num):判断整数 num 是否属于集合,是返回 1,否则返回 0;    Intersection operator&&(Intersection t):重载&&,求当前对象的集合和参数对象 t 的集合的交集,方法是用对象 t 的集合中的每个元素作为参数调用 f 函数,若该元素属于当前对象的集合,则把它复制给交集。    void show():输出集合。(3)在主函数中对定义的类进行测试。定义数组 s1:{1,3,4,5,7,8}、s2:{1,2,3,5,7,9,11},并用它们初始化类 Intersection 的对象 obj1 和 obj2,然后调用相关的成员函数输出集合;定义对象 obj3,并用 obj1 和 obj2 的与运算符结果(交集)初始化该对象,并输出交集。*/#include<iostream>using namespace std;class Inter{private:    int set[20];    int len;public:    Inter(int *s, int k);    Inter();    int fun(int num);    Inter operator &&(Inter t);    void show();};Inter::Inter(int *s, int k){    len = k;   //之前在这出了错误,又重新定义了len,形如int len导致len为初始默认值导致后面的差错    for (int i = 0; i < k; i++)    {        set[i] = *(s + i);    }}Inter::Inter(){    len = 0;    for (int i = 0; i < 20; i++)    {        set[i] = 0;    }}int Inter::fun(int num){    for (int i = 0; i < len; i++)    {        if (num == set[i])            return 1;    }    return 0;}Inter Inter::operator&&(Inter t){    Inter inter;    int count = 0;    for (int j = 0; j < t.len; j++)    {        if (fun(t.set[j]))        {            inter.set[count] = t.set[j];            count++;        }    }    inter.len = count;    return inter;}void Inter::show(){    cout << "交集为:{";    for (int i = 0; i < len; i++)    {        if(i<len-1)            cout << set[i] << ',';        if (i == len - 1)            cout << set[i];    }    cout << " }" << endl;}int main(){    int s1[] = { 1,3,4,5,7,8 };    int s2[] = { 1,2,3,5,7,9,11 };    Inter obj1(s1, 6), obj2(s2, 7);    Inter obj3 = obj1 && obj2;    obj3.show();    system("pause");    return 0;}
原创粉丝点击