gpt4 book ai didi

C++从父类的变量上继承子调用函数

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

在 C++ 中,我有一个基类 Packet,然后是很多子 APIPacket、DataIOPacket 等。现在我想存储传入的数据包,因为我不知道我将其存储在变量中的类型:

Packet packet;
packet = DataIOPacket();

但是现在DataIOPacket有一个函数getAnalogData();我做不到:

packet.getAnalogData();

因为packet没有这个功能。在 Java 中,我认为这是可能的,因为存储在数据包中的对象的实际类型不会丢失(这是正确的吗?)。但是在 C++ 中,我的 DataIOPacket 被缩小为一个 Packed 并失去了它尚未在 Packet 中声明的功能。

您可以在 Packet 中为每个子项中的每个函数创建一个虚函数。但对我来说,这意味着 Packet 中的很多函数在大多数情况下不应该被调用。在 APIPacket 上调用 getAnalogData() 是没有用的。

这个问题是怎么解决的?我找不到答案,但我觉得很多人一定遇到过。

您可以通过类型转换回 DataIOPacket 和 APIPacket 来做一些事情,但这似乎也不是一个干净的解决方案。

是否有库可以解决我的问题?

Rgds,

最佳答案

这在 Java 和 C++ 中也是可能的。您需要执行 dynamic_cast 来检查类型。

 Packet* packet;
packet = new DataIOPacket();

DataIOPacket dio* = dynamic_cast<DataIOPacket*>(packet);
if (dio != 0)
{
dio->DoSomeChildMethodStuff();
}

关于C++从父类的变量上继承子调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415304/

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