好的,所以我有一个类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_t到Vec.