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

标签 c++

<分区>

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

最佳答案

您不能为基本类型或在本例中为指针重载运算符。

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

关于c++ - 如何重载 operator+= 以增加动态数组大小,将一个对象添加到末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57590946/

相关文章:

c++ - 英特尔 MKL 内存管理和异常

c++ - 可变参数模板和参数重载不能一起工作

c# - 使 .Net 3.5 应用程序与 .Net 4.0 应用程序对话的最稳定方式

c++ - 如何使用多个排序键对列表进行排序

c++ - 如何使用 Designer 在 C++/CLI 中继承现有 Windows 窗体控件

c++ - 使用 C++ 技术的代码更少

c++ - 在编译期间初始化 static const std::map?

c++ - 函数调用中临时对象的销毁究竟发生在什么时候?

c++ - 将对话框过程作为方法绑定(bind)到自定义类

c++ - LoadMenu 加载一个看起来非常过时的菜单