Comment procède-t-on pour créer des classe qui ne peuvent être instanciée que sous forme de pointeur?
J'ai essayé de rendre privé tous ses constructeurs et surcharger l'opérateur "new", ça m'a permi de restreindre la déclaration de cette classe à un pointeur mais lorsque j'appèle le "new" k'ai des erreur d'accès
voici ce que j'ai pu faire:
L'interface de la classe
La définition de la classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 nonpublic.h // Une classe qui n'a pas de constructeur public #include<stddef.h> class nonpublic { nonpublic(int = 0); int x; public: void Print(); void* operator new(size_t); };
Mais lorsque je met cette instruction dans le main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 nonpublic.cpp #include<stdlib.h> #include<iostream> #include<stddef.h> #include"nonpublic.h" nonpublic::nonpublic(int i): x(i) {} void nonpublic::Print() { std::cout<<x<<std::endl; } void* nonpublic::operator new(size_t size) { char* chn = ::new char[size]; void* var=static_cast<void*>(chn); nonpublic* val= static_cast<nonpublic* >(var); return val; }
le compilo me renvoie
Code : Sélectionner tout - Visualiser dans une fenêtre à part nonpublic* n = new nonpublic;
Code : Sélectionner tout - Visualiser dans une fenêtre à part C:\Dev-Cpp\Projet\nonpublic\nonpublic.h `nonpublic::nonpublic(int = 0)' is private
Partager