2012-03-18 59 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