簡體   English   中英

在派生構造函數中生成參數時,如何將其傳遞給默認構造函數?

[英]How can I pass a parameter to a default constructor when it is generated in the derived constructor?

我有一個名為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的構造函數? 還是有更好的方法來做到這一點?

有兩種方法可以解決此問題。 最常見的一些方法是:將面的數組設置為protected以便子類可以對其進行訪問;在基類中創建一個受保護的函數SetFaces以設置該數組;或者在基類中使GenerateFaces一個方法,該方法可以訪問私有變量。

哦,最后一條提示:不要使用原始數組/指針,而應使用std::vector

將方法GenerateFaces設為靜態方法。 然后,您可以從基本構造函數調用中調用它。

我在這里假設GenerateFaces方法僅使用來自Cube構造函數的參數即可完成此工作。 您將必須將它們作為參數添加到GenerateFaces方法中。

編輯:我剛想到C#時就看到了C ++標記。 雖然應該仍然適用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM