Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;多态性问题-数据被覆盖_C++_Oop_Object - Fatal编程技术网

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;