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
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);
}; |
La définition de la classe
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;
} |
Mais lorsque je met cette instruction dans le main
nonpublic* n = new nonpublic;
le compilo me renvoie
C:\Dev-Cpp\Projet\nonpublic\nonpublic.h `nonpublic::nonpublic(int = 0)' is private
Partager