[英]In C++, what is the most efficient way in defining a very simple object
假設我正在定義一個表面對象
class surface
{
private:
vector<point> points_;
vector<hexFace> hexFaces_;
}
我已經編寫了一個point
類,這是非常必要的,但是對於hexFace
,實際上它很簡單,它只是四個點標簽的列表,即int [4]。 而且我不需要對其進行任何復雜的操作。
所以我的問題是:定義這種hexFace
對象最有效的方法是什么? 我應該使用struct還是最好去上一堂課或其他? 你會怎么做? 謝謝
而且,如果需要使用類,是否可以嵌套的方式在當前類中定義另一個類? 如果可以,是否還必須在該文件中編寫其構造函數?
結構是否需要構造函數對其進行初始化?
您問幾個問題:
定義此類hexFace對象的最有效方法是什么。
對於您選擇的任何解決方案,運行時效率都將大致相同。 代碼行效率或維護程序程序員腦力的效率可能更有價值。
如果您限於C ++ 11之前的功能,則可以使用:
struct hexFace {
int labels_[4];
};
如果可以使用C ++ 11功能,請嘗試:
class surface
{
private:
std::vector<point> points_;
std::vector<std::array<int, 4>> hexFaces_;
}
我應該使用struct還是最好去上一堂課或其他?
struct
和class
幾乎是同義詞。 使用任何您認為更能表達您意圖的東西。 至於“其他”,請嘗試std::array
如何以嵌套方式在當前類中定義另一個類?
是的你可以。 嘗試:
class surface
{
private:
class hexFace { public: int lables[4]; };
vector<point> points_;
vector<hexFace> hexFaces_;
};
如果可以,是否還必須在該文件中編寫其構造函數?
您可以選擇將其編寫在其他位置,也可以選擇完全省略用戶定義的構造函數。
這是內聯的寫法:
class surface {
public:
class hexFace { public: hexFace() { std::cout << "inline constructor!\n" } };
}
這是如何在外部編寫它
class surface {
public:
class hexFace {
public:
hexFace();
};
// in another file ...
surface::hexFace::hexFace() { std::cout << "extern constructor\n"; }
結構是否需要構造函數對其進行初始化?
class
和struct
都不需要用戶定義的構造函數,但都允許它們。
struct X {
X() { std::cout << "in struct constructor!\n"; }
};
class Y {
public:
Y() { std::cout << "in class constructor!\n"; }
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.