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;icars
中使用了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;
}