构造函数定义

mct*_*l87 0 c++ constructor

好的,所以我有一个类Vector:

#include <cstdlib>

class Vec
{
private:
    size_t size;
    int * ptab;

public:
    Vec(size_t n);
    ~Vec() {delete [] ptab;}

    size_t size() const {return size;}
    int & operator[](int n) {return ptab[n];}
    int operator[](int n) const {return ptab[n];}

    void operator=(Vec const& v);
};

inline Vec::Vec(size_t n) : size(n), ptab(new int[n])
{ }
Run Code Online (Sandbox Code Playgroud)

问题是在我的一个作业练习中我必须扩展构造函数def,所以所有元素都将用零初始化.我以为我知道基础但不能通过这个动态阵列-.-

PS.sry语法和其他错误;)

CB *_*ley 10

new-expression中,您可以使用一对括号作为初始化器来初始化(对于一个int零初始化每个元素的数组)一个对象.

new int[n]()
Run Code Online (Sandbox Code Playgroud)

其他要点:

  • 当您的用户定义的析构函数释放动态分配的数组时,您需要一个用户定义的复制构造函数,以确保您的类易于安全使用.

  • 您的复制赋值运算符应具有返回类型Vec&,而不是void返回*this以符合常见约定并使用标准容器模板.

  • 你应该考虑宣布单参数的构造函数explicit,除非你真的想实现从隐式转换size_tVec.

  • @ 7vies:我认为单个参数构造函数(包括最多只有一个非可选参数的构造函数)应该是`explicit`,除非有充分的理由不这样做.我不了解其他程序员,但在我编写或查看单个参数构造函数的任何代码中(并且应该)`显式`远远超过它们. (2认同)