2011-01-01 12 views
0

ので、私はクラスのベクトルがあります。コンストラクタ定義

#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]) 
{ } 

をし、問題が宿題の演習の一つで、私はので、すべての要素がゼロで初期化されます、defのコンストラクタを拡張する必要があるということです。私は基本を知っていると思っていましたが、このダイナミックアレイを通過できません.-

ps。もしintのアレイのすべての要素をゼロに初期化値初期化()オブジェクトの初期化子として括弧の対を使用することができnew式において)

答えて

10

; grammaおよび他の誤りのためにSRY 。

new int[n]() 

その他の見所:

  • ユーザー定義デストラクタは、あなたのクラスが安全に使用して簡単であることを保証するために、ユーザー定義のコピーコンストラクタを必要とする、動的に割り当てられた配列の割り当てを解除したよう。

  • コピー代入演算子は、共通コンベンションに準拠し、標準コンテナテンプレートを使用するために、戻りタイプがVec&で、voidでなく、戻り値が*thisである必要があります。

  • 暗黙的な変換を実際にsize_tからVecに有効にしない限り、単一のパラメータコンストラクタを宣言することを検討する必要があります。

+0

「明示的な」ルールはどのくらい一般的ですか? –

+0

@ 7vies:私はあなたが何を意味しているかはっきりしていません。私が明示的に使用することについて私が知っている特定の規則はありません。 –

+0

申し訳ありませんが、私は、一般的に人々がデフォルトで明示的にコンストラクタを定義することを意味します。 –

関連する問題