微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一个类的一个实例不是类本身可以是另一个类的许多实例的父类吗?

如何解决一个类的一个实例不是类本身可以是另一个类的许多实例的父类吗?

根本问题

我正在尝试使用 C++ 中的 Vulkan 构建渲染引擎。我正在尝试从引擎结构中删除资产网格、纹理和类似内容,我将其用于测试目的,将其添加到自己的单独类中。我需要访问存储在渲染引擎类中的一些对象,因为每个资产都需要能够将自己添加到顶点向量中,并且例如可以访问相同的 VkDevice

第一次尝试

我尝试的第一种方法是让资产的构造函数将渲染引擎作为其参数之一,然后从资产的渲染引擎中获取指向我需要的所有对象的指针。我仍然认为这种方法可能有效,但我无法在资产类之前声明渲染引擎的类,因为渲染引擎需要它在这种情况下管理的所有资产的向量。我也不能在渲染引擎的类之前声明资产的类,因为这样我就无法将渲染引擎作为资产构造函数的参数。感觉应该有一个简单的解决方案,但我找不到,所以我去尝试我的第二种方法

第二次尝试

我尝试的第二种方法是继承。但是,我在试验它时意识到,我不知道有什么方法可以使渲染引擎类的一个实例成为资产类许多实例的父级。每个资产都需要自己的渲染引擎,但我需要每个资产都继承自同一个渲染引擎,以便所有资产的渲染引擎对象都相同,并避免需要管理多个渲染引擎实例。

最后的想法

我认为可能有一种简单的方法来执行第一个选项,但我认为从长远来看,第二个选项会更有价值,因为它更易于管理、更清洁、代码组织得更好,并且甚至教我更多关于我开始探索的伟大语言的知识。我更喜欢涉及第二种方法解决方案,但我也不知道这是否可行,因为继承似乎不适用于每个实例。最后,我对不涉及这些选项的新想法持开放态度。

最后一个问题

是否有一种继承方法允许一个对象的多个实例从 C++ 中的另一个对象的一个​​实例继承?

解决方法

是否有一种继承方法允许一个对象的多个实例从 C++ 中的另一个对象的一个​​实例继承?

不,你在这里混合了苹果和橙子。

继承是一种从一个或多个基类构建一个类的方法。它与那些类的实例无关,并且在 C++ 中类不是对象。因此,通过从另一个类 D 派生类 B,您可以定义 D,但您不会创建任何 BD 的实例。

当您创建 D 的对象(实例)时,这些对象都将具有相同的二进制布局,其中包括来自 BD 的数据成员。也就是说,类 D 的每个对象都将包含类 B 的一个基本子对象。如果没有类 D 的基本子对象或具有不同的二进制布局,则不能创建类 B 的对象,例如通过在不同的地址引用 B

您可以通过使用引用或(智能)指针(例如 std::shared_ptr)在不同对象之间共享数据。但这与类继承无关。您将不得不使用引用和(智能)指针作为类的数据成员。

,

一个类的一个实例(不是类本身)可以是另一个类的多个实例的父类吗?

技术上是的...如果这些多个实例都是一个完整对象中的所有子对象。示例(这可能是没人会写的东西):

silver

此处,struct Base {}; struct Second : virtual Base {}; struct Third1 : Second {}; struct Third2 : Second {}; struct Derived : Third1,Third2 {}; 中有一个 Base 实例,而该 Derived 实例是 Base 的两个独立实例的(虚拟)基础,这两个实例是 Second 的间接基础。

即使答案是肯定的,我也不知道这在任何用例中是否有用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。