Duplicata possible :
Quelle est l'utilité de rendre le constructeur privé dans une classe ?
Où avons-nous besoin d'un constructeur privé ? Comment pouvons-nous instancier une classe ayant un constructeur privé ?
Duplicata possible :
Quelle est l'utilité de rendre le constructeur privé dans une classe ?
Où avons-nous besoin d'un constructeur privé ? Comment pouvons-nous instancier une classe ayant un constructeur privé ?
Un constructeur privé signifie qu'un utilisateur ne peut pas instancier directement une classe. Au lieu de cela, vous pouvez créer des objets en utilisant quelque chose comme la fonction Constructeur nommé Idiom où vous avez static
des fonctions de classe qui peuvent créer et renvoyer des instances d'une classe.
L'idiome du constructeur nommé permet une utilisation plus intuitive d'une classe. L'exemple fourni dans la FAQ C++ concerne une classe qui peut être utilisée pour représenter plusieurs systèmes de coordonnées.
Ceci est tiré directement du lien. Il s'agit d'une classe représentant des points dans différents systèmes de coordonnées, mais elle peut être utilisée pour représenter des points en coordonnées rectangulaires et polaires. Afin de rendre le système plus intuitif pour l'utilisateur, différentes fonctions sont utilisées pour représenter le système de coordonnées renvoyé. Point
représente.
#include <cmath> // To get std::sin() and std::cos()
class Point {
public:
static Point rectangular(float x, float y); // Rectangular coord's
static Point polar(float radius, float angle); // Polar coordinates
// These static methods are the so-called "named constructors"
...
private:
Point(float x, float y); // Rectangular coordinates
float x_, y_;
};
inline Point::Point(float x, float y)
: x_(x), y_(y) { }
inline Point Point::rectangular(float x, float y)
{ return Point(x, y); }
inline Point Point::polar(float radius, float angle)
{ return Point(radius*std::cos(angle), radius*std::sin(angle)); }
Il y a eu beaucoup d'autres réponses qui correspondent également à l'esprit de la raison pour laquelle les constructeurs privés sont toujours utilisés en C++ (notamment le modèle Singleton).
Une autre chose que vous pouvez faire avec elle est de empêcher l'héritage de votre classe car les classes dérivées ne pourront pas accéder au constructeur de votre classe. Bien sûr, dans cette situation, vous avez toujours besoin d'une fonction qui crée des instances de la classe.
Les constructeurs privés sont utiles lorsque vous ne voulez pas que votre classe soit instanciée par l'utilisateur. Pour instancier de telles classes, vous devez déclarer une méthode statique, qui fait le 'new' et retourne le pointeur.
Une classe avec des ctors privés ne peut pas être placée dans les conteneurs STL, car ils nécessitent un ctor de copie.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.