0

我得到了这个例子

家长班Vehicle

子类Car, Motorcycle, &Lorry

这就是发生的事情:在main.cpp我创造

VehicleTwoD *vehicletwod[100];
Car *myCar = new Car();
Motorcycle *myMotorcycle = new motorCycle();
Lorry *myLorry = new Lorry();

这就是我所做的:

if(selection=="Car")
{
   vehicletwod[arrayCounter] = myCar;
   vehicletwod[arrayCounter]->setName(theName);
   vehicletwod[arrayCounter]->setYear(theYear);
}

if(selection=="Lorry")
{
   vehicletwod[arrayCounter] = myLorry;
   vehicletwod[arrayCounter]->setName(theName);
   vehicletwod[arrayCounter]->setYear(theYear);
}

if(selection=="Motorcycle")
{
   vehicletwod[arrayCounter] = myMotorcycle ;
   vehicletwod[arrayCounter]->setName(theName);
   vehicletwod[arrayCounter]->setYear(theYear);
}

cout << "Record successfully stored. Going back to the main menu " << endl;

这里的问题main.cpp是某种switch-case带有提示的菜单,因此如果用户选择插入新车辆,他会选择车辆类型,并手动输入一些值,例如theNametheYear。然后它将被设置为vehicletwod[arrayCounter].

vehicletwod.

如果用户做了类似的事情

Car
Motorcycle
Car

第 1 辆车的值将被最新Car的(第 2 辆车)覆盖

但是,如果他们输入

Car 
Motorcycle
Lorry

这很好,因为每个对象只运行一次。

如何更改我的声明,使其不会覆盖之前同一个子类的数据。

4

2 回答 2

1

您需要为每个新条目创建一个新CarMotorcycleLorry实例,因为现在您重用现有实例并以这种方式重写数据。你应该做:

if(selection=="Car")
{
   vehicletwod[arrayCounter] = new Car();
   vehicletwod[arrayCounter]->setName(theName);
   vehicletwod[arrayCounter]->setYear(theYear);
}

if(selection=="Lorry")
{
   vehicletwod[arrayCounter] = new Lorry();
   vehicletwod[arrayCounter]->setName(theName);
   vehicletwod[arrayCounter]->setYear(theYear);
}

if(selection=="Motorcycle")
{
   vehicletwod[arrayCounter] = new Motorcycle();
   vehicletwod[arrayCounter]->setName(theName);
   vehicletwod[arrayCounter]->setYear(theYear);
}
于 2012-10-30T16:21:32.320 回答
1

每次您选择一辆新车时,您都必须创建一个全新的对象来持有它。替换你的行:

vehicletwod[arrayCounter] = myCar;

和:

vehicletwod[arrayCounter] = new Car;

对于其他类型也是如此。

于 2012-10-30T16:21:49.170 回答