2011-08-02 6 views

答えて

0

同じクラスの別のコンストラクタを呼び出すと、新しいオブジェクトが作成されます。

これを行うには、コンストラクタロジックをinitメソッドに置き、すべてのコンストラクタから呼び出す必要があります。 C++ 0xので

8

、あなたはコンストラクタ委譲使用することができます。何のコンパイラはまだC++ 0xのを完全にサポートしていないことを

Point(const Point &p) : Point(p.x, p.y) { } 

は注意を。この特定の機能はまだG ++では実装されていません。 C++の古いバージョンでは

、あなたは民間の構築機能に委譲する必要があります。

private: 
    void init(int x, int y) { ... } 
public: 
    Point(const Point &p) { init(p.x, p.y); } 
    Point(int x, int y) { init(x, y); } 
+2

この場合、おそらく面倒なことではないでしょう。 – GManNickG

+1

*古い*バージョンに関するコメントはありません。 * init *とそれに類似した関数を使用するのは常に設計上の誤りでした。 –

+1

ただし、委譲コンストラクタはg ++では実装されていませんが、--std = C++ 0xの場合でも実装されています。私はしばらくそれを理解していませんでした... – Sean

2

私はあなたがこのJavaコード(同じクラスの別のコンストラクタに依存しているコンストラクタによって意味を理解していれば)仕事をする:

public Point(Point p) { 
    this(p.x, p.y); 
} 

これは私がC++で同じことを表現する方法を次のとおりです。

class Point { 

    Point(const Point& p) 
     : Point(p.x, p.y) 
    { 
     ... 
    } 
}; 
関連する問題