簡體   English   中英

在C ++中,定義一個非常簡單的對象的最有效方法是什么

[英]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還是最好去上一堂課或其他?

structclass幾乎是同義詞。 使用任何您認為更能表達您意圖的東西。 至於“其他”,請嘗試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"; }

結構是否需要構造函數對其進行初始化?

classstruct都不需要用戶定義的構造函數,但都允許它們。

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.

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