如何重载运算符+= 要增加动态数组大小,请在末尾添加一个对象
How to overload operator+= to increase dynamic array size, add one object to the end
我正在编写一个程序,我应该在其中添加和删除租车公司的汽车。 我的代码工作正常,但我应该重载 += 运算符以将汽车添加到动态分配的对象数组中。每次添加汽车时,数组大小都需要增加一。我不能使用向量。
如果我不进行任何复制,请将动态数组大小设置为一个大数字,并在运算符 += 中执行此操作,例如:
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+=()
,使其在数组成员的末尾追加一个新对象。
相关文章:
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何使用指针传递给函数的数组中对象的函数成员
- 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- C++ 从名称数组创建对象
- 具有公共内存区域的类似数组的对象
- 如何声明包含整数数组的对象
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- C++包含使用 unique_ptr 的字符数组的对象
- 如何初始化数组指针对象
- C 数组指向对象错误
- 使用 std::array vs 数组传递对象数组
- 具有对象数组的对象
- 使用数组对对象的编译时多态性是否可行?
- 堆数组中对象的构造函数
- 无法修改数组中对象的队列
- 使用数组作为对象调用派生类的方法
- 如何使函数返回指针到C 中的数组或对象
- 从另一个类访问指针数组的对象
- 如何声明二维数组的对象和返回它从一个函数
- 一个类的数组中对象的最大数目