2011-08-02 3 views

Répondre

0

Si vous appelez un autre constructeur de la même classe, il créera un nouvel objet. Si vous voulez faire cela, vous devez placer la logique du constructeur dans une méthode init et l'appeler de tous les constructeurs.

8

En C++ 0x, vous pouvez utiliser déléguant des constructeurs:

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

Notez qu'aucun compilateur a un support complet pour C++ 0x encore; cette fonctionnalité particulière n'est pas encore implémentée en G ++.

Dans les anciennes versions de C++, vous devez déléguer à une fonction de construction privée:

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

Bien que dans ce cas, il ne vaut probablement pas la peine. – GManNickG

+1

Je ne reçois pas le commentaire sur * versions * plus anciennes. C'était toujours une erreur de conception en utilisant * init * et des fonctions similaires. –

+1

Attention, les constructeurs de délégation ne sont pas implémentés en g ++ mais même avec --std = C++ 0x. Je n'ai pas réalisé que pendant un moment une fois ... – Sean

2

Si je comprends ce que vous entendez par ce code Java (un constructeur qui repose sur un autre constructeur de la même classe faire le travail):

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

voici comment j'exprimer la même chose dans C++:

class Point { 

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