2016-11-19 8 views
1

にArrayListに同様にC++で民間からのコンストラクタ内のベクトルを初期化する方法を、私は次の操作を行います:私はJavaでは</p> <p>可能な限り、これはのようにシンプルにしてみましょうJavaの

public class foo{ 

    private final int x; 
    private final ArrayList<classname1> one; 
    private final ArrayList<classname2> two; 

    //constructor 
    public foo(int x){ 
     this.x = x; 
     one = new ArrayList<>(); 
     two = new ArrayList<>(); 
     menu(); 
    } 

私はその後、私は現在、しかし、C++を使用していて、私はC++でのArrayListの同等のベクトルであることを読んでいた私のコード

全体で「1」と「2」を使用します。私は実験を試みましたが、私はどのようにJavaコードのようにコンストラクタ内のベクトルを初期化するのかを理解することは難しいと思っています。

これは、私は、C++で、これまで持っているものです。

class foo{ 

private: int x; 
private: vector<classname1> one; 
private: vector<classname2> two; 

public: 

//constructor 
foo(int x) { 
this->x= x; 
//how would I initialize the vectors here like in java? Something like but of course it doesn't work: 
     one = new Vector<>(); 
     two = new Vector<>(); 
menu(); 
} 

ありがとうございました!どんな助けもありがたい。

+0

これは初期化する対象によって異なりますが、これを明確にする必要があります。しかし、デフォルトの初期化ベクトルが必要な場合は、何もしないでください。 – juanchopanza

+0

ちょうど 'foo(int val):x(val){menu(); } '。 'one'と' two'は 'foo'オブジェクトと同じ割り当て空間にあります。 'foo'クラスから独立させたい場合は、' unique_ptr > one'または別のスマートポインタで宣言する必要があります。 – Franck

答えて

3

初期化するものは何もありません。 std::vectorには独自のデフォルトコンストラクタがあります。最初の内容で明示的にstd::vectorを初期化する必要がない限り、何もする必要はありません。

Javaですべてのオブジェクトは実際のオブジェクトではありませんので、あなたはJavaで何をすべきかしなければならない理由があります。実際にはオブジェクトへのポインタです。したがって、Javaコンストラクタは、newキーワードを使用して、それぞれを慎重に初期化する必要があります。これはC++では当てはまりません。

C++オブジェクトは、根本的に異なる動作をします。あなたがC++を学んでいる間に、あなたがオブジェクトについて知っていることをすべて忘れてしまったら、あなたは大きな好意を持っています。この分野のC++の構文はJavaと非常に似ていますが、C++のオブジェクトはJavaとは基本的に異なる働きをしています。類似を描こうとすると、混乱するだけです。間違った経路の時間と時間。

C++オブジェクトを学び、理解するための正しい方法は、優れたC++の本を読み、およびJavaについて考えないことです。

同じことが他のすべてのために行きます。 C++の "private"キーワードは、Javaの "private"キーワードと同じではありません。 C++コードの "private"の3つのインスタンスのうち、最初のものだけが必要です。他の2人は絶対に何もしません。

C++は、Javaではありません。

関連する問題

 関連する問題