J'ai une question sur les constructeurs privés en C++. Si le constructeur est privé, comment puis-je créer une instance de la classe ?
Devrions-nous avoir une méthode getInstance() à l'intérieur de la classe ?
J'ai une question sur les constructeurs privés en C++. Si le constructeur est privé, comment puis-je créer une instance de la classe ?
Devrions-nous avoir une méthode getInstance() à l'intérieur de la classe ?
Cela dépend de la raison pour laquelle le constructeur a été rendu privé en premier lieu (vous devriez demander à la personne qui a écrit la classe que vous éditez). Parfois, un constructeur peut être rendu privé pour interdire la construction par copie (tout en permettant la construction par un autre constructeur). D'autres fois, un constructeur peut être rendu privé pour interdire la création de la classe sauf par les "amis" de la classe (ceci est couramment fait si la classe est une "aide" qui ne doit être utilisée que par la ou les classes pour lesquelles la classe d'aide a été créée). Un constructeur peut également être rendu privé pour forcer l'utilisation d'une fonction de création (généralement statique).
Si vous créez un constructeur privé, vous devez créer l'objet à l'intérieur de la classe.
#include<iostream>
//factory method
using namespace std;
class Test
{
private:
Test(){
cout<<"Object created"<<endl;
}
public:
static Test* m1(){
Test *t = new Test();
return t;
}
void m2(){
cout<<"m2-Test"<<endl;
}
};
int main(){
Test *t = Test::m1();
t->m2();
return 0;
}
Un constructeur privé en C++ peut être utilisé pour restreindre la création d'un objet d'une structure constante. Et vous pouvez définir une constante similaire dans la même portée que l'enum :
struct MathConst{
static const uint8 ANG_180 = 180;
static const uint8 ANG_90 = 90;
private:
MathConst(); // Restricting object creation
};
Accédez-y comme MathConst::ANG_180
.
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.