我正面临以下问题。
我实现了父类 Vehicle ,它具有一些派生类,其中之一是 FastVehicle 。
在程序中,我需要存储一个Vector of Vehicle *指针。指针也可以指向Vehicle对象或FastVehicle对象。
1)我希望能够为 vector 中的每个对象调用 print()方法。
问题是,在FastVehicle的情况下,我也想将参数传递给函数,
我需要调用带有签名的函数:
void print(int a)
我对虚函数机制有些了解,但是据我所知,仅当两个函数具有相同的签名时,它才有效。
我想听听有关如何实现的建议。
2)此外,在派生类 FastVehicle中,具有一些与父类Vehicle不共享的独特功能。
它执行的任务只应对 FastVehicle 对象执行。
实现此目的的最干净的方法是什么?
我想也许可以在父类 Vehicle 中实现“空”虚拟函数,并在的替代方法中实现“真实”任务FastVehicle
也许有人可以提出更好的解决方案。
谢谢
最佳答案
您始终可以使用dynamic_cast将Vehicle转换到FastVehicle。如果Vehicle不是FastVehicle,则返回NULL。如果您确实应该这样做,则取决于您的使用情况。
for(Vehicle* vehicle : vehicleVector)
{
FastVehicle* fastVehicle = dynamic_cast<FastVehicle*>(vehicle);
if(fastVehicle)
{
fastVehicle->print(1337);
fastVehicle->somethingElse();
}
else
{
vehicle->print();
}
}
此处提供完整示例:https://ideone.com/69n6Jb