使用重载operator =复制对象向量

时间:2017-05-26 10:06:35

标签: c++ operator-keyword

我尝试将矢量comanda复制到矢量comenzi:

 public :
        Ospatar(char nume[30],Comanda * comanda,int nrcom,char sex,int varst)
        {
            strcpy(Nume,nume);

            comenzi=new Comanda[sizeof(comanda)];
            for(int i=0;i<sizeof(comanda);i++)
            {
                comenzi[i]=comanda[i];

            }
            cout<<endl;

            nrComenzi=nrcom;
            gen=sex;
            varsta=varst;

        }

这是来自Class Comanda的重载运算符:

Comanda& operator=(Comanda  c)
    {
        Prod.set_denProd(c.Prod.get_denProd());

        Num=c.Num;
        nrPortii=c.nrPortii;
        date.zi=c.date.zi;
        date.luna=c.date.luna;
        date.an=c.date.an;

    }

矢量comanda的前两个元素很好地转移到矢量comenzi但在那之后我得到一些随机数...

1 个答案:

答案 0 :(得分:0)

通常你应该使用std :: vertor - 这是在C ++中这样做的正确方法。但假设您不允许使用标准库:

首先你的Comanda :: operator =应该通过引用接受参数(最好是引用const):

Comanda& operator=(const Comanda& c)

然后,sizeof(comanda)返回指向Comanda的指针的大小,而不是数组中元素的数量。您通常必须在单独的参数中传递数组的大小(我猜nrcom就是那个)。

所以:

comenzi = new Comanda[nrcom];
for (int i=0; i<nrcom; i++)

等...

你当然需要更多地清理代码(那些strcpy的东西),最后但并非最不重要的是不要忘记为你分配的数据添加delete []。