2012-03-18 44 views
0

我今天早些時候發佈了關於模板類的內容,但相當遙遠,從這裏得到了我以前的問題的解決方案。當然,處理這個問題時,總會有一個我無法想象的新問題。模板類和初始化爲零的數組

鑑於下面的構造:

template <typename Type, int inSize> 
sortedVector<Type, inSize>::sortedVector(): 
    size(inSize), vector(new Type[inSize]), amountElements(0) 
{} 

我想使一個動態數組,這是我然後可以通過一個附加的方法輸入的任意類型的元素進入。從主的通話將如下所示:

sortedVector<Polygon, 10> polygons; 
sortedVector<int, 6> ints; 

我怎麼能初始化數組爲零時,它的構造?我無法將對象設爲零;)

我還以爲我被聰明,並試圖過載多邊形= - 運算符和給定一個int那就什麼也不做。原來我不能這麼做):

有什麼好的建議嗎?

而且,這裏的模板類sortedVector:

template <typename Type, int inSize> 
class sortedVector 
{ 
public: 
    sortedVector(); 
    int getSize(); 
    int getAmountElements() 
    bool add(const Type &element); 

private: 
    Type *vector; 
    int size; 
    int amountElements; 
}; 

以防萬一還多邊形:

class Polygon 
{ 
public: 
    Polygon(); 
    Polygon(Vertex inVertArr[], int inAmountVertices); 
    ~Polygon(); 
    void add(Vertex newVer); 
    double area(); 
    int minx(); 
    int maxx(); 
    int miny(); 
    int maxy(); 
    int getAmountVertices() const;   
    friend bool operator > (const Polygon &operand1, const Polygon &operand2); 
    friend bool operator < (const Polygon &operand1, const Polygon &operand2); 

private: 
    Vertex *Poly; 
    int amountVertices; 
}; 
+0

以下是一些建議:如果涉及家庭作業,請將**作業**標籤添加到您的問題中。否則,你會得到很多「使用std :: vector」類型的答案。 – 2012-03-18 16:59:48

回答

4

初始化數組元素Type()。這是標準庫容器的作用。對於內置數字類型,Type()等於0.對於類/結構類型,Type()構造了一個臨時的默認構造對象。 (,混淆名稱,順便給定的std::vector<>的突出)

+0

謝謝!正是我在找的! – JKase 2012-03-18 16:47:49

0

就分配「矢量」的每一個元素爲默認值。默認值是剛剛Type(),所以你會做這樣的事情在構造體:當它的構造

std::fill(vector, vector + size, Type()); 
0

我怎樣才能數組初始化爲零?我可以 沒有將對象設置爲零;)

您可以使用所謂的默認構造值。換句話說,你需要定義(如果沒有定義的話)特殊的值,它將爲你的對象扮演零角色。

2

你可以使用Type()獲得一個默認構造的對象。更好的方法是直接使用std::vector<T>或通過薄包裝器添加任何需要的功能或約束。雖然沒有std::vector<T>是可行的,但實際上正確管理資源和對象的任何解決方案將最終重新實現至少部分std::vector<T>

+0

+1包裝'std :: vector '而不是重新發明輪子是很好的建議。 – 2012-03-18 16:52:38

+0

我檢查了OP的以前的問題,這似乎是作業的一部分。他們經常禁止在編程類中使用STL容器,以便學生學習如何從頭開始編寫自己的數據結構。 – 2012-03-18 16:56:51

+0

這可能是好的,但正如你所說的Emile - 限制:) – JKase 2012-03-18 17:04:25