Bonjour,
Je con�oit actuellement mon premier programme en C++ et je me pose pas mal de questions concernant les "bonnes pratiques" de conception li�es � ce langage afin d'�crire du code robuste et utilisable professionnellement.
Histoire de me lancer, je transpose un utilitaire de diagnostic multi-OS que j'avais d�velopp� en C.
Voici l�impl�mentation basique, n'h�sitez pas � me corriger si je fais fausse route :
Cette classe n'a ni constructeur ni impl�mentation concr�te dans un .cpp, est-ce un probl�me ?
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 /* Une classe abstraite représentant un OS quelconque */ // Une classe basique, un errcode et un getter/setter #include "GenericException.h" class GenericOs { public: std::string GetManufacturer() { return m_manufacturer; } // [...] accesseurs pour toutes les propriétés communes protected: std::string m_manufacturer; // [...] virtual void initializeOsInfo(void) = 0; }
La cr�ation de l'objet doit donc se faire dans un bloc try, bonne solution ? Je dois aussi syst�matiquement cr�er un objet GenericException pour lever une exception, ne vaut il pas mieux en faire un singleton voir une classe statique ?
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 /* Classe héritée spécifique à Windows */ class WindowsOs : public GenericOs { public: WindowsOs(); protected: virtual void initializeOsInfo(void); private: OSVERSIONINFOEX m_win32_osInfo; } // Implémentation .cpp : WindowsOs::WindowsOs() { initializeOsInfo(); } void WindowsOs::initializeOsInfo(void) { memset(&m_win32_osInfo, 0, sizeof(OSVERSIONINFOEX)); m_win32_osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if (GetVersionEx( (OSVERSIONINFO*)&m_win32_osInfo ) == 0) { GenericException ex; ex.SetErrorCode(1); throw(ex); } // [...] }
Une fois le programme achev� (avec par exemple des classes GenericUnix:GenericOs, LinuxOS:GenericUnix, BSD et consorts), quelle sera la "meilleure" m�thode pour utiliser la classe ad�quate ?
J'imagine des directives de pr�proc/Makefile qui vont bien pour la compilation, mais existe il une m�thode pour appeler le (logiquement seul) descendant de GenericOs impl�ment� comme j'ai cru (sans certitude) le voir en Java ou en C# ?
Merci d'avance d'�clairer ma lanterne.
Partager