如何重载运算符+= 要增加动态数组大小,请在末尾添加一个对象

How to overload operator+= to increase dynamic array size, add one object to the end

本文关键字:数组 一个对象 添加 动态 增加 重载 何重载 运算符      更新时间:2023-10-16

我正在编写一个程序,我应该在其中添加和删除租车公司的汽车。 我的代码工作正常,但我应该重载 += 运算符以将汽车添加到动态分配的对象数组中。每次添加汽车时,数组大小都需要增加一。我不能使用向量。

如果我不进行任何复制,请将动态数组大小设置为一个大数字,并在运算符 += 中执行此操作,例如:

cars[numcars] = obj;
numcars++;
return *this;

代码工作正常,我得到了输出; 但是,如果我尝试:

  • 创建新对象数组[大小+1]
  • 将旧阵列复制到新阵列;
  • 将新对象添加到新数组;
  • 删除旧阵列;
  • 将原始数组指针指向新数组;

它不起作用,程序在第一次输入后崩溃。我已经尝试了很多变化,但我似乎无法找到我出错的地方。 我有两个类,一个是汽车类,一个是RentACar(我有对象数组(。在 car 类中有 2 个构造函数(其中一个是复制构造函数,运算符 =、== 和 <<被重载并且它们工作正常。


这是我重载+=运算符的最新尝试。numcars设置为 0

RentACar& operator+=(Automobile &obj){
Automobile *temp = new Automobile[numcars+1];
for (int i = 0; i < numcars+1; i++){
temp[i] = cars[i];
}
numcars++;
temp[numcars] = obj;
delete [] cars;
cars = temp;
return *this;
}

这是main()中的部分

for (int i=0;i<n;i++)
{
char marka[100];
int regisracija[5];
int maximumBrzina;
cin>>marka;
for (int i=0;i<5;i++)
cin>>regisracija[i];
cin>>maximumBrzina;
Automobile nov=Automobile(marka,regisracija,maximumBrzina);
//add car
agencija+=nov;
}

该函数应使"cars"数组变大1,并在末尾添加新对象。相反,程序在输入最大Brzina后崩溃。

不能重载基本类型的运算符,在这种情况下,也不能重载指针。

如果您不能使用std::vector或任何标准容器,我认为您应该创建自己的容器。
创建一个包装数组的类。然后重新定义此类的operator+=(),使其在数组成员的末尾追加一个新对象。