gpt4 book ai didi

c++ - 如何重载 operator+= 以增加动态数组大小,将一个对象添加到末尾

转载 作者:行者123 更新时间:2023-11-28 01:18:54 27 4
gpt4 key购买 nike

<分区>

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

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

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

代码运行良好,我得到了输出;但是,如果我尝试:

  • 创建新对象数组[size+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”数组变大一,并在末尾添加新对象。相反,程序在输入 maximumBrzina 后崩溃。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com