c++继承,多态和存储对象
c++ inheritance, polymorphism and storing objects
我得到了一个简单的赋值,一开始没有挑战性,但是让我头疼,我不能解决一个(两个?)问题,这是存储对象(没有切片)和得到想要的函数。
我认为这是多态性和虚拟化的问题,所以说:
我有一个类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);
};
现在我的目标是获得所有车辆(包括超级车辆)的列表(或其他类型的存储),随机填充车辆或超级车辆,然后随机使用正确的方法,例如:
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: (...)
}
}
我不在乎作业。我只是想解这个,因为解这个花了我所有的时间。谢谢大家的回答。
假设我对pojazd
的评论是Vehicle
,并且问题是在派生类SuperVehicle
中访问附加函数getAccelleration
(等),那么解决方案是:
- 使基类具有一个在基类中"什么都不做"的虚函数。
- 使用
dynamic_cast
检查结果。
方案二示例:
SuperVehicle* sv = dyanmic_cast<SuperVehicle*>(*VehicleIterator);
if(sv)
{
sv->getAcceleration();
}
else
{
cout << "Not a supervehicle, don't try to get accelleration!" << endl;
}
通常,不赞成使用dynamic_cast
(因为它实际上用一堆if语句破坏了代码流,特别是在有许多派生类的情况下)。最好拥有具有空/无操作函数和/或包装功能的基类,这样可以在没有强制类型转换和大量if语句的情况下维护泛型功能。
相关文章:
- 如何使用 stl 容器有效地存储对象?(即根据其字段的值进行搜索)
- 线程上下文上的静态存储对象优化
- OOP - 存储对象和服务接口
- 为什么存储对象地址在缓冲区中会导致内存泄漏并删除它们
- 是否保证在销毁所有线程本地存储对象后销毁全局对象
- 使用列表存储对象
- 在c++中存储一个对象或不存储对象的首选方式是什么
- 更好的是:存储对象与存储指针
- 应用程序使用QMAP存储对象时停止响应
- 使用堆栈存储对象
- 如何在 std::map 中存储"对象类型"?
- 我应该如何存储对象
- 在 c++ 中存储对象的最佳策略是什么,确保名称唯一并能够在以后有效地检索它们
- 用于存储对象列表的最佳标准类
- 在C++中存储对象地址的数据结构
- 函子如何维护/存储对象的状态
- 我如何定义一个向量,并用C++在其中存储对象
- 存储对象以备将来使用(在重新启动程序时)
- C++/JNI-存储对象(jobject)在向量和数组中发生意外更改,C++或JNI问题
- 在多个容器中存储对象的最佳实践