2011-03-13 8 views
0

私の割り当てでは、VectorListクラスを作成していますが、コンストラクタに関する質問がありました。これは、クラスの宣言です:VectorListクラスのコンストラクタ

#include <iostream> 
#include <vector> 
using namespace std; 
template< typename NODETYPE > 
class VectorList 
{ 
public: 
    VectorList(); // constructor 
    ~VectorList(); // destructor 

    void insertAtFront(const NODETYPE &); 
    void insertAtBack(const NODETYPE &); 
    bool removeFromFront(NODETYPE &); 
    bool removeFromBack(NODETYPE &); 
    bool isEmpty() const; 
    void print() const; 
private: 
    vector<NODETYPE> *vList; // list data as a vector 
}; 

私はVLIST =新しいのstd ::ベクトルを使用することになり、コンストラクタのためにと思いました。割り当てはこれを持っています:

template< typename NODETYPE > 
VectorList<NODETYPE>::VectorList() 
: // Fill in the missing code 
{ 
    // empty body 
} 

私はvList = new std :: vectorを入れることができません。彼が空にしたいと思うようにコンストラクタの本体で。私はこの時点で何をすべきか分かりません。

+0

あなたのコードを見やすくなるように投稿を再フォーマットしてみてください。テキストコンテンツを選択し、ツールバーのコードボタンをクリックします。あなたのコードを見るのが難しい場合は、あなたの質問に答えるのは難しいです。 – Maz

+0

あなたのvListはベクトルへのポインタでなければなりませんか?それがポインタでない場合は、自動的に空のベクトルに初期化されます。 – GWW

答えて

2

あなたの先生はconstructor initializer listのために釣っています。それは通常の変数の宣言時に初期化と等価であるため、

template< typename NODETYPE > 
VectorList<NODETYPE>::VectorList() 
    : vList(new std::vector) 
{ 
} 

これはメンバーを初期化するための標準的な方法で、例えば:これはコンストラクタが実行される前に、あなたがメンバーを初期化することができますあなたはint a;として宣言クラスのメンバ変数を持っていた場合

int a(3); // Calls int constructor with 3. Note int a = 3; does same (no call to operator=) 

は、初期化は宣言で行われますが、コンストラクタでそれを置くことは、オブジェクトがすでに作成されて後に実行することはできません。これは実際に代入され、オブジェクトのコンストラクタの代わりにoperator=を使用して行われます。これは、次のものと同等です。

using namespace std;また、私が想定しているのはヘッダーファイルです。これは、あなたのヘッダが#includeであるファイルの名前空間を汚染し、潜在的に名前の衝突(ひいては微妙なエラー)を引き起こす可能性があるため、悪い考えです。その行を削除した後、vector<NODETYPE>宣言の前に接頭語std::を追加する必要があります。

最後に、あなたがこれまでに投稿したコードの中で、あなたはメンバ変数として、通常のベクトルオブジェクトを持つことができたときに(新付き)ヒープ上vListを割り当てる必要はありません。

vector<NODETYPE> vList; 

このコードを簡素化し、微妙なメモリ管理バグを導入する可能性を低減します。あなたの初期化子リストはもう必要なくなり、デストラクタも何もしません。さらに、カスタムコピーコンストラクタや代入演算子を定義して、コピーや代入を安全にしたり、正しく動作させたりすることを心配する必要はありません。

+0

ああ、私は今理解しています。ありがとうございました。 – robertisdude

関連する問題