gpt4 book ai didi

c++ - 虚拟方法 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:56 25 4
gpt4 key购买 nike

我面临以下问题。

我实现父类 - Vehicle,它有一些派生类,其中之一 - FastVehicle

在程序中,我需要存储 Vehicle* 指针的 Vector。指针也可以指向 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

关于c++ - 虚拟方法 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27972582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com