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

C++ 如何重载运算符+;=要增加动态数组大小,请在末尾添加一个对象,c++,C++,我正在写一个程序,我应该在其中添加和删除汽车租赁公司的汽车。 我的代码工作得很好,但是我应该重载+=操作符,以便将汽车添加到动态分配的对象数组中。每次我添加一辆车,数组大小都需要增加一个。我不能使用向量 如果不进行任何复制,请将动态数组大小设置为一个较大的数字,然后在运算符+=中执行此操作,例如: cars[numcars] = obj; numcars++; return *this; 代码运行良好,我得到了输出; 但是,如果我尝试: 创建新对象数组[大小+1] 将旧数组复制到新数组 将新

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

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

cars[numcars] = obj;
numcars++;
return *this;
代码运行良好,我得到了输出; 但是,如果我尝试:

  • 创建新对象数组[大小+1]
  • 将旧数组复制到新数组
  • 将新对象添加到新数组中
  • 删除旧数组
  • 将原始数组指针指向新数组
它不工作,程序在第一次输入后崩溃。我尝试了很多变化,但我似乎无法找到我的错误之处。
我有两个类,一个是Automobile,一个是RentACar(我有对象数组)。在car类中有2个构造函数(其中一个是copy构造函数,operators=,==和您不能重载基本类型的运算符,或者在本例中是指针

如果您不能使用
std::vector
或任何标准容器,我认为您应该创建自己的容器。

创建一个封装数组的类。然后重新定义该类的
运算符+=()
,方法是在数组成员的末尾附加一个新对象。

不能重载基本类型的运算符,在本例中,不能重载指针

如果您不能使用
std::vector
或任何标准容器,我认为您应该创建自己的容器。

创建一个封装数组的类。然后重新定义该类的
操作符+=()
,方法是在数组成员的末尾附加一个新对象。

什么是
agencija
?RentACar的定义在哪里?
for(int i=0;i
不正确。您在
汽车中使用了
numcars
条目(位置
0
numcars-1
),但您试图复制
numcars+1
项目(位置
0
numcars
)。这可能是碰撞的原因,因为
汽车[numcars]的内存不足
包含复制构造函数试图解释和访问的垃圾数据。如果类
Automobile
的对象包含指针(直接或间接),则保证崩溃。当我看到要求“我不能使用向量”时,它应该是
i=0;i
我的第一个想法是填充
名称空间not_std{模板类not_vector{…};}
尽可能多地使用
std::vector
的成员。下面是整个程序的链接,其中的代码在操作符+=”内工作。@Caleth我甚至更进一步,使用
std::array
作为后端:P从零开始重新实现的唯一事情就是调整大小,这几乎变得微不足道
agencija
?RentACar
的定义在哪里?(int i=0;i不正确。您在
cars
中使用了
numcars
条目(位于
0
numcars-1
),但您试图复制
numcars+1
项目(位置
0
numcars
)。这可能是崩溃的原因,因为
cars[numcars]
上的内存包含复制构造函数试图解释和访问的垃圾数据。如果类
Automobile
的对象包含指针(直接或间接),崩溃是有保证的。它应该是
i=0;i
。当我看到要求“我不能使用向量”时,我的第一个想法是填充
名称空间not_std{模板类not_vector{…};}
尽可能多地使用
std::vector
的成员。下面是整个程序的链接,其中的代码在操作符+=”内工作。@Caleth我甚至更进一步,使用
std::array
作为后端:P从头开始重新实现的唯一事情就是调整大小,这几乎变得微不足道
 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;
}
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;
    }