que fait ce code (et surtout pourquoi??)
bonjour, toujours dans la comprehension des outils pour mieux programmer (du moins essayer),
j'en suis au log.
j'ai compris le principe du log, j'arrive a faire un simple log, mais je comprend pas ce log...
http://loulou.developpez.com/tutorie.../partie1/#L2.1
et oui encore... desolé
(d'un autre coté, c'est la base que j'utilise avant d'aller voir sur d'autre site...pourquoi y a pas ce genre de truc dans les boucains???)
en fait, voici ce que je comprend pas.
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
class ILogger
{
public :
virtual ~ILogger();
static void SetLogger(ILogger* Logger);
static void Log(const char* Format, ...);
static ILogger& Log();
template <class T> ILogger& operator <<(const T& ToLog);
protected :
std::string CurrentDate() const;
std::string CurrentTime() const;
private :
virtual void Write(const std::string& Message) = 0;
static void Destroy();
static ILogger* s_Instance; // Pointeur sur le logger actuel
void ILogger::SetLogger(ILogger* Logger)
{
Destroy();
s_Instance = Logger;
}
void ILogger::Destroy()
{
delete s_Instance;
s_Instance = NULL;
} |
bon alors voila ce que je comprend pas,
premierement , la clase write est en private, ca veux dire qu'elle ne sera pas heritée dans les classes abstraites, or il faut la surdefinir, comment peut on redefinir qqch qu'on a pas??? j'ai regardé ici
http://c.developpez.com/tutcpp/x3770.php
mais elle sont toutes public (pour les = 0) sniff (ou alors, j'ai mal regardé ( ce qui est tout a fait possible)
Moi ce que je crois comprendre (sachant que le code est bon ) c'est qu'il faut la surdefinir dans private de la classe heritée, mais alors est ce moyen pour faire passé des fonction membres privée a sa sous classe??et si oui, qu'a t elle comme droit sur les autres donnée de la classe mere?? (suis je assez clair???)
autre chose que je comprend pas (mais je crois que ca s'adresse plus a l'auteur)
c'est que fait la fonction SetLogger , si j'ai bien compris (et c'est pas grand choses) elle detruit l'ancien log pour en mettre pour en mettre un nouveau qu'il faut avoir construit, donc si on a un log pour le moteur et un autre pour l'affichage (que sais je) et que les msg sont alternée, il faut chque dois detruire l'un et construire l'autre puis au prochain msg detruire l'autre et reconstruire l'un???
ai je bien compris??je ne crois pas , je vois comment les codé, (j'ai meme reussir a en faire un petit log simpa et sans derivée youpi) mais je vois pas comment utilisé celui la??
voila, encore deux question en plus a mon actif (ca commence a faire beaucoup je trouve)
merci
a++
Re: que fait ce code (et surtout pourquoi??)
Citation:
Envoyé par elekis
Code:
1 2 3
|
private :
virtual void Write(const std::string& Message) = 0; |
[...]
bon alors voila ce que je comprend pas,
premierement , la clase write est en private, ca veux dire qu'elle ne sera pas heritée dans les classes abstraites, or il faut la surdefinir, comment peut on redefinir qqch qu'on a pas???
Je vais tout d'abord reformuler cette phrase, avec du vocabulaire plus C++ien, puis je commente :
"La fonction ILogger::Write est privée, ca veux dire qu'elle ne sera pas héritée dans les classes dérivées, or il faut la redéfinir, comment peut on redefinir qqch qu'on a pas?"
En fait, ce n'est pas tout à fait ça. Déclarer une fonction privée indique juste qu'il sera impossible de l'appeler depuis l'extérieur de la classe, y compris une classe dérivée. Rien n'empêche de la redéfinir.
C'est un idiome assez courant, au point que certains préconisent (et mon expérience en la matière me pousse à être d'accord avec eux) de mettre toutes les fonctions virtuelles en privé, sauf les cas où l'on attend de la classe dérivée qu'elle ait besoin dans son implémentation de la fonction d'appeler la fonction de la classe de base, auquel cas on déclare la fonction virtuelle en protégé.
Voir par exemple http://www.gotw.ca/publications/mill18.htm