【问题标题】:How can I pass a parameter to a default constructor when it is generated in the derived constructor?在派生构造函数中生成参数时,如何将参数传递给默认构造函数?
【发布时间】:2012-12-10 03:56:27
【问题描述】:

我有一个名为 RenderObject 的类,它包含 3 个变量:一个位置、一个保存指向数组长度的 int 以及指向“Faces”数组的指针

Face 只是一个包含其类型(四边形或三角形)、颜色和指向顶点数组的指针(存储为 Vector3f)的类。

我的 RenderObject 类有一个构造函数,它需要一个位置、一个面数组和 int,即数组中的面数。

我还有一个叫做 Cube 的类,它是从 RenderObject 派生的(所以我可以很容易地生成一个具有宽度、高度和深度尺寸的立方体。

问题是,Cube的构造函数只需要位置和尺寸,所以在调用默认构造函数时:

Cube::Cube( sf::Vector3f *positionVector, float width, float height, float depth ) : RenderObject( positionVector, /*can't supply this*/, 6 ) {

我无法传递面数组,因为 Cube 类运行 GenerateFaces();根据尺寸自动创建面。

所以我的问题是,如何将生成的面传递给 RenderObject 的构造函数?或者有更好的方法吗?

【问题讨论】:

    标签: c++ class opengl constructor sfml


    【解决方案1】:

    将 GenerateFaces 方法设为静态方法。然后,您可以从基本构造函数调用中调用它。

    我在这里假设 GenerateFaces 方法可以只使用来自 Cube 构造函数的参数。您必须将这些作为参数添加到 GenerateFaces 方法中。

    编辑:当我想到 C# 时,我刚刚看到了 C++ 标签。不过应该仍然适用。

    【讨论】:

      【解决方案2】:

      有几种方法可以解决这个问题。一些最常见的方法是创建面部数组protected,以便子类可以访问它,在基类中创建一个受保护的函数SetFaces 来设置数组,或者使GenerateFaces 成为一个方法在可以访问私有变量的基类中。

      最后一个提示:不要使用原始数组/指针,而是使用 std::vector

      【讨论】:

        猜你喜欢
        • 2013-09-14
        • 2013-11-15
        • 1970-01-01
        • 1970-01-01
        • 2013-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多