0

3つの変数を保持するRenderObjectというクラスがあります。位置、ポイントされた配列の長さを保持する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のコンストラクターに渡すにはどうすればよいですか?それとも、これを行うためのより良い方法はありますか?

4

2 に答える 2

2

これを解決するには、いくつかの方法があります。最も一般的な方法のいくつかはprotected、子クラスからアクセスできるように面の配列を作成するか、配列SetFacesを設定するために基本クラスで保護された関数を作成するかGenerateFaces、プライベートにアクセスできる基本クラスのメソッドを作成することです。変数。

最後のヒント:生の配列/ポインターを使用せず、std::vector代わりに使用してください。

于 2012-12-23T07:15:49.833 に答える
1

メソッドGenerateFacesを静的メソッドにします。その後、base-constructor呼び出し内から呼び出すことができます。

ここでは、GenerateFacesメソッドがCubeコンストラクターからのパラメーターのみで機能することを前提としています。これらをパラメータとしてGenerateFacesメソッドに追加する必要があります。

編集:C#を念頭に置いているときにC++タグを見ただけです。ただし、引き続き適用できるはずです。

于 2012-12-23T07:11:57.127 に答える