classe qui ne s'instancie que comme pointeur??
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
Code:
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
Code:
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
Code:
nonpublic* n = new nonpublic;
le compilo me renvoie
Code:
C:\Dev-Cpp\Projet\nonpublic\nonpublic.h `nonpublic::nonpublic(int = 0)' is private