C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Définir une classe log et l'utiliser comme cerr
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Cornu Nicolas
Guest





PostPosted: Sun Apr 10, 2005 8:15 am    Post subject: Définir une classe log et l'utiliser comme cerr Reply with quote



Bonjour,

J'aimerais définir une classe log
et l'utiliser comme cerr.

log << "erreur";

J'ai éssayer plusieurs surcharge de l'opérateur <<
en définissant à l'extèrieur de la classe log une surcharge
sans succès


Merci d'avance,

Cornu Nicolas


Back to top
Fabien LE LEZ
Guest





PostPosted: Sun Apr 10, 2005 8:46 am    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote



On Sun, 10 Apr 2005 10:15:27 +0200, "Cornu Nicolas"
<nicolas.cornu (AT) club-internet (DOT) fr>:

Quote:
J'aimerais définir une classe log
et l'utiliser comme cerr.

log << "erreur";

class Log
{
public:
template {
//...
return *this;
}
};


--
;-)

Back to top
Cornu Nicolas
Guest





PostPosted: Sun Apr 10, 2005 2:27 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote



class Logger : public ILogger
{
public:
Logger();
~Logger();
void write(std::string);
template <typename T> Logger& operator << (T const& t) { return *this; };
};
----------------------------------------------------------------------------
-----
#include "logger.h"
int main(int argc, char *argv[])
{
ILogger *log = new Logger();
log->write("132");
log << "123";
std::string s;
std::cin >> s;
return EXIT_SUCCESS;
}
----------------------------------------------------------------------------
-----
main.cpp(31): error C2296: '<<' : non conforme, l'opérande gauche est du
type 'ILogger *'
main.cpp(31): error C2297: '<<' : non conforme, l'opérande droit est du type
'const char [4]'

D'avance merci,


"Fabien LE LEZ" news:upph51p25iru9bbe53lvssi0dqlgu9dihs (AT) 4ax (DOT) com...
Quote:
On Sun, 10 Apr 2005 10:15:27 +0200, "Cornu Nicolas"
[email]nicolas.cornu (AT) club-internet (DOT) fr[/email]>:

J'aimerais définir une classe log
et l'utiliser comme cerr.

log << "erreur";

class Log
{
public:
template {
//...
return *this;
}
};


--
Wink



Back to top
Fabien LE LEZ
Guest





PostPosted: Sun Apr 10, 2005 2:44 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

On Sun, 10 Apr 2005 16:27:18 +0200, "Cornu Nicolas"
<nicolas.cornu (AT) club-internet (DOT) fr>:

Quote:
int main(int argc, char *argv[])
{
ILogger *log = new Logger();

Tu te crois en Java ?

ILogger log;

Quote:
log << "123";

Ben oui, dans ton code "log" est un pointeur, pas un objet.


--
;-)

Back to top
Cornu Nicolas
Guest





PostPosted: Sun Apr 10, 2005 3:09 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

J'ai besoin de créer une classe virtuelle pure.

class ILogger {
public:
ILogger();
virtual ~ILogger() = 0;
virtual void write(std::string) = 0;
virtual template <typename T> Logger& operator << (T const& t) = 0;
};

NC
"Fabien LE LEZ" news:osei51tvs1v8lal8t7a513e389evgk32bu (AT) 4ax (DOT) com...
Quote:
On Sun, 10 Apr 2005 16:27:18 +0200, "Cornu Nicolas"
[email]nicolas.cornu (AT) club-internet (DOT) fr[/email]>:

int main(int argc, char *argv[])
{
ILogger *log = new Logger();

Tu te crois en Java ?

ILogger log;

log << "123";

Ben oui, dans ton code "log" est un pointeur, pas un objet.


--
Wink



Back to top
Fabien LE LEZ
Guest





PostPosted: Sun Apr 10, 2005 3:16 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

On Sun, 10 Apr 2005 16:27:18 +0200, "Cornu Nicolas"
<nicolas.cornu (AT) club-internet (DOT) fr>:

Quote:
int main(int argc, char *argv[])
{
ILogger *log = new Logger();
log->write("132");
log << "123";
std::string s;
std::cin >> s;
return EXIT_SUCCESS;
}

Note que le code ci-dessus est totalement incorrect, puisque "log" est
créé par new et jamais détruit.


--
;-)

Back to top
Fabien LE LEZ
Guest





PostPosted: Sun Apr 10, 2005 3:18 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

On Sun, 10 Apr 2005 17:09:44 +0200, "Cornu Nicolas"
<nicolas.cornu (AT) club-internet (DOT) fr>:

Note : inutile de recopier mon message, surtout après ton propre
message.
D'une manière générale, tu peux virer toute ligne de citation qui se
trouve après la dernière ligne que tu tapes.
Cf <http://www.giromini.org/usenet-fr/repondre.html>.

Quote:
J'ai besoin de créer une classe virtuelle pure.

Et ?

Si j'ai bien compris, ILogger (encore un Java-isme, ce nom :-/ ) est
une classe de base, non instanciable, et Logger est une classe
instanciable dérivée de ILogger.

Dans ce cas, un code correct et représentatif serait :

void f (ILogger& log)
{
log << "Hello world!" << endl;
}

int main()
{
Logger mon_logger;
f (mon_logger);
}

Mais normalement, on ferait dériver Logger (ou ILogger) de ostream,
pour pouvoir écrire :

void f (ostream& log)
{
log << "Hello world!" << endl;
}

int main()
{
Logger mon_logger;
f (mon_logger);

f (cout);
f (cerr);
}



--
;-)

Back to top
Cornu Nicolas
Guest





PostPosted: Sun Apr 10, 2005 3:41 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

on peut pas fair sans passer par la fonction f ?


Back to top
Cornu Nicolas
Guest





PostPosted: Sun Apr 10, 2005 3:44 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

Le probleme vient de virtual template ...
Je ne sais pas comment declaré la surcharge d el'operateur au niveau de la
clase virtuelle ILogger

Je ne suis pas un adepte de Java mais plutot de .NET
Je préfère suffixer mes interface avec un I :)


Back to top
Vincent Lascaux
Guest





PostPosted: Sun Apr 10, 2005 3:53 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

Quote:
class Logger : public ILogger
{
public:
Logger();
~Logger();
void write(std::string);
template <typename T> Logger& operator << (T const& t) { return *this; };
};

Le template devrait être dans ILogger

class ILogger
{
public:
virtual ~ILogger() { }
virtual void write(const std::string& s)=0;
template ILogger& operator << (const T& t)
{
std::stringstream ss;
ss << t;
write(ss.str());
}
};

Quote:
----------------------------------------------------------------------------
-----
#include "logger.h"
int main(int argc, char *argv[])
{
ILogger *log = new Logger();
log->write("132");
log << "123";

*log << "123";

--
Vincent



Back to top
Cornu Nicolas
Guest





PostPosted: Sun Apr 10, 2005 3:58 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

J'ai beosin de redefinir la fonction dans les classe filles de ILogger
je prévoit de faire un FileLogger, DatabaseLogger ...

Nico

"Vincent Lascaux" <nospam (AT) nospam (DOT) org> a écrit dans le message de
news:42594c3a$0$6815$636a15ce (AT) news (DOT) free.fr...
Quote:
class Logger : public ILogger
{
public:
Logger();
~Logger();
void write(std::string);
template <typename T> Logger& operator << (T const& t) { return
*this; };
};

Le template devrait être dans ILogger

class ILogger
{
public:
virtual ~ILogger() { }
virtual void write(const std::string& s)=0;
template ILogger& operator << (const T& t)
{
std::stringstream ss;
ss << t;
write(ss.str());
}
};


--------------------------------------------------------------------------
--
-----
#include "logger.h"
int main(int argc, char *argv[])
{
ILogger *log = new Logger();
log->write("132");
log << "123";

*log << "123";

--
Vincent





Back to top
Vincent Lascaux
Guest





PostPosted: Sun Apr 10, 2005 4:00 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote


"Cornu Nicolas" <nicolas.cornu (AT) club-internet (DOT) fr> a écrit dans le message de
news: 42594d0d$0$15285$7a628cd7 (AT) news (DOT) club-internet.fr...
Quote:
J'ai beosin de redefinir la fonction dans les classe filles de ILogger
je prévoit de faire un FileLogger, DatabaseLogger ...

Tu pourras (devras même) y redéfinir write (qui est virtuelle pure)

--
Vincent



Back to top
Cyrille
Guest





PostPosted: Sun Apr 10, 2005 4:08 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

Cornu Nicolas a écrit :
Quote:
J'ai beosin de redefinir la fonction dans les classe filles de ILogger
je prévoit de faire un FileLogger, DatabaseLogger ...

Pour ça vous pouvez utiliser ce qu'on vient juste de vous donner, en
surchargeant la fonction virtuelle write.

A part ça n'oubliez pas de lire ceci, svp:
http://www.giromini.org/usenet-fr/repondre.html

--
win the yes need the no to win against the no!

Back to top
Cornu Nicolas
Guest





PostPosted: Sun Apr 10, 2005 4:27 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

Oui s'est vrai je ne fesait pas appel a la fonction write dans le code de
l'operateur de surcharge.


Back to top
Fabien LE LEZ
Guest





PostPosted: Sun Apr 10, 2005 5:49 pm    Post subject: Re: Définir une classe log et l'utiliser comme cerr Reply with quote

On Sun, 10 Apr 2005 17:44:31 +0200, "Cornu Nicolas"
<nicolas.cornu (AT) club-internet (DOT) fr>:

Quote:
Je ne suis pas un adepte de Java mais plutot de .NET

C'est la même chose. La principale différence est l'éditeur.

Quote:
Je préfère suffixer mes interface avec un I Smile

"Préfixer", tu veux dire ?

Note que le terme "interface" est peu courant en C++. Le concept même
m'est peu familier -- j'ai rarement l'occasion de faire des classes ne
contenant que des fonctions virtuelles pures.


--
;-)

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.