Thread View: de.comp.lang.c++
3 messages
3 total messages
Started by Stephan Klevenz
Mon, 26 Feb 1996 09:34
<<-operator virtual ???
Author: Stephan Klevenz
Date: Mon, 26 Feb 1996 09:34
Date: Mon, 26 Feb 1996 09:34
57 lines
1399 bytes
1399 bytes
Hallo,
vieleicht kann mir jemand bei meinem Problem helfen:
Ich moechte den <<-Operator ueberladen und als virtuelle Methode
an eine abgeleitete Klasse vererben. Etwa so:
class A
{
public:
virtual ostream& operator << (ostream& os)
{
return os << "bla(A)" << endl;
}
};
class B : public A
{
public:
virtual ostream& operator << (ostream& os)
{
A::operator << (os);
return os << "bla(B)";
}
};
Als Ergebnis haette ich gerne:
void main(void)
{
A* p=new B;
cout << (*p);
}
erwartete Ausgabe: bla(A)
bla(B)
Es funktioniert aber nicht. Was mache ich falsch? Kann man den
<<-Operator überhaupt virtuell ueberschreiben?
Gruss
Stephan
--
Stephan Klevenz
Leica Lasertechnik GmbH
INF518
Im Neuenheimer Feld 5-8
69120 Heidelberg
Germany
EMail: klevenz@llt.de
Phone +49 6221 4148 28
Fax +49 6221 4148 33
Re: <<-operator virtual ???
Author: Harald Fuchs
Date: Mon, 26 Feb 1996 18:19
Date: Mon, 26 Feb 1996 18:19
54 lines
2024 bytes
2024 bytes
Stephan Klevenz <klevenz@llt.de> writes:
> Hallo,
> vieleicht kann mir jemand bei meinem Problem helfen:
> Ich moechte den <<-Operator ueberladen und als virtuelle Methode
> an eine abgeleitete Klasse vererben. Etwa so:
> class A
> {
> public:
> virtual ostream& operator << (ostream& os)
> {
> return os << "bla(A)" << endl;
> }
> };
> class B : public A
> {
> public:
> virtual ostream& operator << (ostream& os)
> {
> A::operator << (os);
> return os << "bla(B)";
> }
> };
> Als Ergebnis haette ich gerne:
> void main(void)
> {
> A* p=new B;
> cout << (*p);
> }
> erwartete Ausgabe: bla(A)
> bla(B)
> Es funktioniert aber nicht. Was mache ich falsch? Kann man den
> <<-Operator überhaupt virtuell ueberschreiben?
Kann schon, aber das tut nicht das, was Du willst.
"virtual ostream& A::operator << (ostream&)" ist für Ausdrücke der
Form "anA << anOstream" da, nicht für sowas wie "cout << a".
Lösung:
class A {
virtual void printOn (ostream&) const;
public:
friend ostream& operator << (ostream& os, const A& a)
{ a.printOn (os); return os; }
};
Re: <<-operator virtual ???
Author: Stephan Klevenz
Date: Tue, 27 Feb 1996 07:12
Date: Tue, 27 Feb 1996 07:12
48 lines
1567 bytes
1567 bytes
Harald Fuchs wrote:
>
> Stephan Klevenz <klevenz@llt.de> writes:
>
> > Hallo,
> > vieleicht kann mir jemand bei meinem Problem helfen:
>
> > Ich moechte den <<-Operator ueberladen und als virtuelle Methode
> > an eine abgeleitete Klasse vererben. Etwa so:
>
> > class A
> > {
> > public:
> > virtual ostream& operator << (ostream& os)
> > {
> > return os << "bla(A)" << endl;
> > }
> > };
>
> > class B : public A
> > {
> > public:
> > virtual ostream& operator << (ostream& os)
> > {
> > A::operator << (os);
> > return os << "bla(B)";
> > }
> > };
> class A {
> virtual void printOn (ostream&) const;
> public:
> friend ostream& operator << (ostream& os, const A& a)
> { a.printOn (os); return os; }
> };
Danke, gut Idee. Muss ich gleich mal ausprobieren...
--
Stephan Klevenz
Leica Lasertechnik GmbH
INF518
Im Neuenheimer Feld 5-8
69120 Heidelberg
Germany
EMail: klevenz@llt.de
Phone +49 6221 4148 28
Fax +49 6221 4148 33
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads