【发布时间】:2014-03-09 11:36:16
【问题描述】:
我得到了一个简单的任务,一开始并没有什么挑战性,但是让我很头疼,我无法解决一个(两个?)问题,即存储对象(没有切片)并获得想要的功能。
我认为这是多态性和虚拟化的问题,所以直截了当:
我有一个类 Vehicle:
class Vehicle
{
protected:
int speed;
int id;
public:
int getSpeed ();
int getID();
};
还有一个继承自它的类:
class SuperVehicle : public Vehicle
{
protected:
int acceleration;
public:
int getAcceleration();
int getSomething();
int setAcceleration(int number);
};
现在我的目标是获取所有车辆(包括 SuperVehicles)的列表(或其他类型的存储),用 Vehicles 或 SuperVehicles 随机填充,然后随机填充 找到正确的方法,例如:
list<Vehicle*> listOfVehicles;
list<Vehicle*>::iterator VehiclesIterator;
for(int i = 0; i <5; i++)
{
if (i % 2) listOfVehicles.push_back(new Vehicle());
else listOfVehicles.push_back(new SuperVehicle());
}
while(true)
{
randomVehicle = rand() % 5;
for(VehiclesIterator = listOfVehicles.begin();
VehiclesIterator != listOfVehicles.end(); VehicleIterator++)
{
if (VehicleIterator.getID() == randomVehicle) break;
}
if (randomVehicle % 2) randomFunction = rand() % 2;
else randomFunction = rand() % 4;
switch(randomFunction)
{
case 0: (*VehicleIterator)->getSpeed(); break;
case 1: (...)
case 2: (*VehicleIterator)->getAcceleration(); break
case 3: (...)
}
}
我不关心任务。只想解决这个问题,因为思考解决方案需要我所有的时间。感谢所有答案。
【问题讨论】:
-
那么您的具体问题是什么?
-
虚拟成员函数正是关于“获得正确的函数”
-
这不起作用,迭代器没有显示 SuperVehicle 的方法,只显示基类的方法,因为它可能正在切片(基于迭代器的类型)。
-
既然你想将不相关的类存储在一个列表中:看看 boost::any
-
不需要虚函数,因为派生类中没有被覆盖的函数
标签: c++ list inheritance polymorphism storage