【发布时间】:2021-12-26 09:45:23
【问题描述】:
(C++) 从父类获取子类的最佳方法是什么,例如:我正在制作一个游戏引擎,所以我有名为网格、灯光和相机的类,它们都是不同的,但它们有一个共同点,它们都有变换,所以我做了一个名为节点和网格的类,灯光和相机都扩展了节点。 (节点保存常见的数据,如转换,只能保存这三种类型中的一种)。所以我将拥有这些节点的层次结构(转换)。所以稍后在我遍历这个层次结构之后,在某个节点上我如何获得我的网格或灯光,因为我如何知道特定节点是否持有网格或灯光或相机,因为节点是一个通用类并且可以容纳所有 3这些。长话短说有没有办法知道什么类型的对象节点持有,如果我发现我怎样才能从节点获取网格对象或灯光对象???提前致谢!
示例代码:
class Node // generic class
{
private:
//hold transformation data
};
class Mesh : public Node
{
//mesh information
};
class Light : public Node
{
//mesh information
};
...
int Main()
{
Node node;
//node will be initialized with a mesh, light or camera
//so how do i know if this node is a mesh, light, or etc...
//and how to get the mesh/light/camera data
}
【问题讨论】:
-
定义像
Node这样的接口的要点是您不需要需要确切知道您指向的是哪个派生类,您可以调用属于接口,它们将被分派到适当的具体对象。但是,您发布的代码中很少有 sn-ps 表明您将遭受object slicing 的困扰。不幸的是,C++ 中的多态性主题有点过于宽泛,无法用一个 SO 问题来回答。 -
如果
Mesh和Light不能用同一个接口描述,你就和Liskov Substitution Principle发生冲突了
标签: c++ inheritance parent-child hierarchy