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 :

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;
}
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
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);
    }
 
    // [...]
}
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 ?

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.