begin process at 2012 05 29 00:47:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

MFC

 > 

Comment gérer une classe statique pour un programme ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment gérer une classe statique pour un programme ?

jeudi 1 février 2007 à 09:56:00 | Comment gérer une classe statique pour un programme ?

billou_13

Membre Club
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
---------------------
jeudi 1 février 2007 à 13:58:29 | Re : Comment gérer une classe statique pour un programme ?

turnerom

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.
jeudi 1 février 2007 à 15:18:17 | Re : Comment gérer une classe statique pour un programme ?

billou_13

Membre Club
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
---------------------
jeudi 1 février 2007 à 15:36:12 | Re : Comment gérer une classe statique pour un programme ?

yann_lo_san

Réponse acceptée !

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.

//////////////////////////////////////////////////////////////////////////////
// Log.h

class Log
{
private:
      static CStdioFile file;

public:
      static void WriteString(const CString& str);
      static void Close() { file.close(); }
};

//////////////////////////////////////////////////////////////////////////////
// Log.cpp

// Init membre static

CStdioFile Log::file.m_hFile = NULL;

// WriteString

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...

jeudi 1 février 2007 à 15:45:31 | Re : Comment gérer une classe statique pour un programme ?

yann_lo_san

PS : Le problème du Singleton (qui est une bonne idée) est qu'il faut externaliser l'objet à tous les modules cpp du prog.

vendredi 2 février 2007 à 15:07:29 | Re : Comment gérer une classe statique pour un programme ?

billou_13

Membre Club
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
---------------------


Cette discussion est classée dans : programme, classe, gérer, trop, statique


Répondre à ce message

Sujets en rapport avec ce message

Encore DirectX... Comment gérer le ALT-TAB ? [ par ProGamer ] Oui, comment faire ? Je veux permettre aux utilisateurs de mon programme de ALT-TABer (haha). Seulement, il y a une histoire de surfaces et de périphé gestion de fichier en C++ [ par croftlou ] Bonjour je suis debutant en C++, je desire faire un petit projet en C+++, pour gere des des fichiers en lecture et en ecriture.Pour cela ej voudrai cr Gérer des images en dynamique [ par Forthian ] Alors cette fois j'ai besoin de tout votre bon sens...Mes profs m'ont chier un truc, j'ai rien capté, eux non plus mais jsuis censé le faire quand mê problème de mémoire [ par ptitchep ] BonjourJe développe un jeux en c++ assembleur 16 bit avec borland c++ 4.5. J'aurais besoin d'une bonne quantité de mémoire (environ 1Mo) pour stocker Comment exporter une classe avec sa boite de dialogue ? [ par marcel6566 ] Bonsoir,J'utilse VC++6 - MFC.J'ai réalisé un programme contenant plusieurs boites de dialogues avec leurs classes. Je souhaiterais récupérer une de ce Ouvrir des images avec Qt [ par zionzion ] Salut tout le monde,Je découvre Qt et je cheche un moyen simple d'ouvrir des images : en commençant d'abord par des .bmp puis en finissant par des .jp classe de DLL dans un programme... [ par Gendal67 ] Bonjour,Désolé de vous demander, je suis débutant dans la création de DLL : je viens à l'instant d'apprendre des trucs de bases dc un livre spécial qu Creation d'une classe [ par enrageur ] J'ai fais un petit programme en C++ et j'aimerais creer une classe avec a l'interieur le petit programme. Mais je ne sais pas comment creer une clase. nombre trop grand ? [ par pandakill ] Bonjour à tous,Voila j'ai récemment fait le programme suivant en C pour résoudre une solution, et malgré tous mes efforts je ne comprends pas pourquoi Classe et Dll. [ par jamais34 ] Je dois modifier un programme réaliser en VC++, c'est à dire faire un .exe et d'autre part une dll qui doit gérer le port série et un protocole de com


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales