2011-08-02 102 views

回答

0

如果您調用同一個類的另一個構造函數,它將創建一個新對象。

如果你想這樣做,你應該把構造函數邏輯放在init方法中並從所有構造函數中調用它。

8

在C++ 0x中,你可以使用委託構造函數:

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

注意,沒有編譯器提供了的C++ 0x還全面支持;這個特殊的功能還沒有在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) 
    { 
     ... 
    } 
};