在派生构造函数中生成参数时,如何将参数传递给默认构造函数?

时间:2012-12-23 07:08:04

标签: c++ class opengl constructor sfml

我有一个名为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的构造函数?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

使方法GenerateFaces成为静态方法。然后,您可以在base-constructor调用中调用它。

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

编辑:我在考虑C#时只看到了C ++标签。应该仍然适用。