2016-10-13 14 views
0

これは私の現在のクラス割り当てに関する質問です。私は自分のコードで1つのコンストラクタだけを使う必要があり、どうやってそれを行うのかは分かりません。デフォルトのコンストラクタの使用を避けるにはどうすればよいですか?

class test { 
    public: 
    test(int x, int y, int z); 
    (...) 
    private: 
    int x,y,z; 
} 

test::test(int x = 0, int y = 0, int z = 0){ 
    this -> x = x; 
    this -> y = y; 
    this -> z = z; 
} 

int main(){ 
    test test1, test2(1,2,3) 
    (...) 
} 

現在、私はtest1に一致する関数呼び出しを持っていないと言っているので、コンパイルされません。私は、int x = 0をパラメータとして使用するとデフォルトのものを設定することを確信していました...

+5

あなたは二度 'test1'を持っています。また、デフォルトのパラメータ値は定義ではなく、宣言内にある必要があります。 – krzaq

答えて

0

デフォルトのパラメータは、定義ではなく宣言に入るべきです。

class test { 
    public: 
    test(int x = 0, int y = 0, int z = 0); 
    (...) 
    private: 
    int x,y,z; 
} 

と定義:あなたはそれでいる間、あなたはコンストラクタ初期化子リストを使用しての良い習慣を身に取得することができます

test::test(int x, int y, int z){ 
    this -> x = x; 
    this -> y = y; 
    this -> z = z; 
} 

test::test(int x, int y, int z): 
    x(x), y(y), z(z) 
{ 
} 
+1

デフォルトの引数は宣言ではなく定義に入れることができますが、インターフェイスに関連するものは宣言に入れる必要があるため、ひどいスタイルです。 – Brian

+0

少し明確にしました。 ≠でなければならないが、意図が十分明白であるかどうかはわからない。 – krzaq