C++实验题请求帮助

集合是由一个或多个确定的元素所构成的整体,集合的运算有开,交相对补等,

集合A和集合B的交集;由属于A且属于B的相同元表组成的集合,

重合A和集合的并集:由所有属于集合A或属于集合的元表所组成的集台集合B关于集台A的相对补集,记做A-B :由属于A而不属于8的元赤组成的集合。

假设集合A=(10,20,30),集合8=(1,,10,50.8,则A与8的并是(10,20,30,1.50.8},A与B的交是(10),6关于A的祖对补集是(20.30).

定义整数集台类CSet,属性包括:重合中的元法个数n,整型指针dala存诸集合中的元表。

主函数输入集合A、8的数据,计算集合的并、交、相对补。

可根据题目,为CSet类添加需要的成员函数。

方法有,重载输出,按样例格式输出集合中的元素。

重载+运算符,求集合A和集合6的并集,并返回结果策合,重载运算符,求集台B关于集合A的相对补集、并返回结果集合,面较运算符,求集合人和集合B的交集,并返回结果集合。

输入

测试次数

每组测试数据两行,格式如下
第一行:集合A的元素个数和元素
第二行:集合的元素个数和元素

输出

每组测试数据输出如下:
第一行:集合A

第二行:集合B
第三行; A和B的并
第四行: A和B的交
第五行:B关于A的相对补集与A关于B的相对补集的并,即(A-B)+(B-A)
每组测试数据之间以空行间隔


#include<iostream>
using namespace std;
class CSet{
    public:
        CSet(){
        }
        CSet(int n1,int *p)
        {
            n=n1;
            data=new int[n];
            int j;
            for(j=0;j<n;j++)
                data[j]=p[j];
        }
        void show()
        {
            int j;
            for(j=0;j<n;j++)
                if(j!=n-1)
                cout<<data[j]<<" ";
                else
                cout<<data[j]<<endl;
        }
        friend CSet operator + (CSet &a,CSet &b);
        friend CSet operator - (CSet &a,CSet &b);
        friend CSet operator * (CSet &a,CSet &b);
        ~CSet()
        {
            delete []data;
        }
    private:
        int n;
        int *data;
};

CSet operator - (CSet &a,CSet &b)//ayou bmeiyoude
{
    CSet c;
    int i=0,j,k,z;
    int *p=new int[a.n+b.n];
    for(j=0;j<a.n;j++)
    {
        z=0;
        for(k=0;k<b.n;k++)
        {
            if(a.data[j]==b.data[k])
            {
                z=0;
                break;
            }
            else
                z=1;
        }
        if(z==1)
        {
            p[i]=a.data[j];
            i++;
        }
    }
    c.n=i;
    c.data=new int[i];
    for(j=0;j<i;j++)
    {
        c.data[j]=p[j];
    }
    delete []p;
    return c;
}

CSet operator * (CSet &a,CSet &b)
{
    CSet c;
    int j,k,i=0,z,m,g;
    int *p=new int[a.n];
    for(j=0;j<a.n;j++)
    {
        for(k=0;k<b.n;k++)
        {
            if(a.data[j]==b.data[k])
            {
                p[i]=a.data[j];
                i++;
                break;
            }
        }
    }
    c.data=new int[i];
    c.n=i;
    for(j=0;j<i;j++)
    {
        c.data[j]=p[j];
    }
        
    delete []p;
    return c;
}

CSet operator + (CSet &a,CSet &b)
{
    CSet c;
    int j,k,i=0,z=0,m,g=b.n;
    c.n=a.n+b.n;
    c.data=new int[c.n];
    int *p1=new int[a.n];
    int *p2=new int[b.n];
    for(j=0;j<a.n;j++)
        p1[j]=a.data[j];
    for(j=0;j<b.n;j++)
        p2[j]=b.data[j];
    for(j=0;j<g;j++)
    {
        for(k=0;k<a.n;k++)
            if(p2[j]==p1[k])
            {
                for(m=j;m<g;m++)
                {
                    p2[m]=p2[m+1];
                }
                g--;    
            }
    }
    for(j=0;j<a.n;j++)
        c.data[j]=p1[j];
    c.n=a.n+g;
    for(j=a.n;j<c.n;j++)
    {
        
        c.data[j]=p2[i];
        i++;
    }
    delete []p1;
    delete []p2;
    return c;
}

int main()
{
    int t,i,n1,m,j,n2;
    cin>>t;
    for(i=0;i<t;i++)
    {
        cin>>n1;
        int *p1=new int[n1];
        for(j=0;j<n1;j++)
            cin>>p1[j];
        CSet A(n1,p1);
        cin>>n2;
        int *p2=new int[n2];
        for(j=0;j<n2;j++)
            cin>>p2[j];
        CSet B(n2,p2);
        cout<<"A:";
        A.show();
        cout<<"B:";
        B.show();
        CSet C=A+B;
        cout<<"A+B:";
        C.show();
        CSet D=A*B;
        cout<<"A*B:";
        D.show();
        CSet E=A-B;
        CSet F=B-A;
        CSet G=E+F;
        cout<<"(A-B)+(B-A):";
        G.show();
        delete []p1;
        delete []p2;
        if(i!=t-1)
        cout<<endl;
    }
    return 0;
}