billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 2014
-
1 févr. 2007 à 09:56
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 2014
-
2 févr. 2007 à 15:07
Bonjour,
Alors, voila la requête ne devrait pas vous posée trop de souci mais j'avoue galérer un peu. J'ai une classe Logger qui me permet de gérer un journal de log (Jusque là normal ^^). Le petit souci intervient lorsque je me demande:
- comment faire pour ne créer qu'une seule instance de cette classe pour mon programme
- et surtout, comment accéder à cet objet dans n'importe quelle partie de mon code (de toutes les pages cpp) : quelle déclaration utilisée en haut de la feuille ?
J'ai quelques petites idées mais surement pas encore les bonnes. J'ai pensé à une classe static mais j'avoue ne pas trop savoir comment cela marche. Et à quand je recherche static, je ne trouve pas mon bonheur ^^. J'ai aussi pensé aux classes Nested mais je ne sais pas si c'est vraiment adapté ou si cela n'a rien à voir.
Comment feriez-vous ?
(je travaille sous visual studio .net 2003 avec le MFC)
Merci à vous,
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
A voir également:
Comment gérer une classe statique pour un programme ?
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 1 févr. 2007 à 15:36
Salut,
Une classe static veut dire qu' aucun membre d'instance n'existe dans la classe. On appelle toujours ses méthodes par Classe::Methode().
Cette classe n'est pas instanciable en tant qu'OBJET.
Exemple minimal (juste le Log.h suffit pour tout le prog)
Le fichier est ouvert au premier appel de la méthode d'écriture et est fermé à la fin du prog.
void Log::WriteString(const CString& str)
{
// premier passage, le fichier n'est pas ouvert
CFileStatus status;
if( !file.GetStatus(status) )
{
// Création du SEUL fichier du prog en écriture
// file.Open("debug.log", modeCreate | modeWrite)
}
// Ecrit la chaine
// file.WriteString(str);
}
// Utilisation partout ou #include "Log.h" est présent
// Le premier appel crée le fichier en écriture.
Log::WriteString("une chaine de log");
// MFC fermera le fichier à la fin du prog, mais on peut le faire
Log::Close();
Ce morceau de code n'est pas testé, c'est juste un exemple.
On pourrait mettre le style printf au WriteString
static void WriteString(const char* fmt, ...);
Rajouter des attributs de couleur avec le protocole RTF.
ect...
turnerom
Messages postés492Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention12 janvier 20121 1 févr. 2007 à 13:58
Pour une seule est unique instanciation de class, il te faut une classe dite singleton. Pour cela, tu declare une classe ayant son constructeur private avec une methode static te permettant de l'instancier.
Exemple d'instanciation :
maClassSingleton* maClass;
maClassSingleton::create(maClass);
Ainsi la seule facon qque tu as de créer ta classe est par la méthode static create. Ainis tu peux savoir si ta classe est déjà instanciée ou pas ! Et donc ne pas pouvoir en instancier d'autres.
Cherche plus de détail sur la classe singleton sur Google.
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 1 févr. 2007 à 15:18
Ok, merci beaucoup pour ce début de réponse. Je vais aller l'approfondir sur google. Si vous avez des exemples très concrêt (lien ou autres) je suis preneur.
J'aimerais aussi savoir comment récupérer l'objet partout dans mon code.
Si je trouve, je mettrais des infos sur ce post.
Merci encore,
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 2 févr. 2007 à 15:07
Merci à vous pour vos réponses. Je vais voir tout cela. Je vais quand même étudier le singleton car ça a l'air très intéressant comme truc.
Bon week-end !
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------