我正面临以下问题。

我实现了父类 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

09-07 06:56