C++ C++;多态性问题-数据被覆盖
我得到了这个例子 父类C++ C++;多态性问题-数据被覆盖,c++,oop,object,C++,Oop,Object,我得到了这个例子 父类车辆 儿童班汽车,摩托车,&卡车 事情就是这样:在main.cppI创建 VehicleTwoD *vehicletwod[100]; Car *myCar = new Car(); Motorcycle *myMotorcycle = new motorCycle(); Lorry *myLorry = new Lorry(); 我就是这么做的: if(selection=="Car") { vehicletwod[arrayCounter] = myCar;
车辆
儿童班汽车
,摩托车
,&卡车
事情就是这样:在main.cpp
I创建
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;
第一辆车的值将被最新的车
覆盖(第二辆车)
但是,如果他们输入
Car
Motorcycle
Lorry
这很好,因为每个对象只运行一次
如何更改我的声明,使其不会覆盖以前同一子类的数据。您需要为每个新条目创建一个新的
汽车、摩托车和卡车实例,因为现在您可以重用现有实例,并以这种方式重写数据。你应该做:
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);
}
每次选择新车时,您必须创建一个全新的物体来固定它。替换您的线路:
vehicletwod[arrayCounter] = myCar;
与:
对于其他类型也是如此。请显示操作arrayCounter的代码。事实上,请只显示所有代码,如果太长,请将其简化为最简单的代码,这样仍然可以显示问题。你要求人们诊断他们看不见的代码中的问题。下面的一个猜测可能是正确的,但不管是否正确,现在它们都是相同的猜测。
vehicletwod[arrayCounter] = myCar;
vehicletwod[arrayCounter] = new Car;