Conception et gestion des exceptions
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:
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:
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.