πŸš€ go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1915

Re: Probleme beim Vererben von fstream

#1915
From: Nico Josuttis
Date: Tue, 26 Mar 1996 12:50
55 lines
2291 bytes
In article <4j2hdo$lrk@zeus.rbi.informatik.uni-frankfurt.de>,
Thomas Holubar  <holubar@informatik.uni-frankfurt.de> wrote:
>hf@colibri.de (Harald Fuchs) wrote:
>>Thomas Holubar <holubar@informatik.uni-frankfurt.de> writes:
>>
>>> [deleted]
>>
>>> Zunaechst: ein ueberladener stream-Operator _muss_ eine
>>> "friend-function" sein.
>>
>>Nein.  Eine externe Funktion, die auf private Member zugreift, muß
>>eine Friend-Funktion sein.  Das ist fΓΌr einen Stream-Operator aber
>>nicht unbedingt der Fall:
>>
>Ok, mit meinem "muss friend-function sein" habe ich mich nicht
>richtig ausgedrueckt. Allerdings wuerde ich doch _sehr_ empfehlen
>stream-Operatoren als "friend" zu deklarieren.
>

NEIN, das wuerde ich NICHT, denn Friend-Funktionen koennen nicht
virtuell sein. Wer Friend-Funktionen verwendet, sorgt deshalb
dafuer, dass oeffentliche Vererbung seiner Klasse
u.U. nicht richtig funktioniert.
Zumindest sofern Vererbung nicht ausgeschlossen ist, sollte deshalb
der Operator global implementiert eine Elementfunktion des
zweiten Operanden aufrufen:

class XXX {
  public:
    ...
    virtual void printOn (ostream& strm) const;
    virtual void scanFrom (istream& strm);
};

inline ostream& operator<< (ostream& strm, const XXX& x)
{
    x.printOn (strm);
    return strm;
}
inline istream& operator>> (istream& strm, const XXX& x)
{
    x.scanFrom (strm);
    return strm;
}


Da diese Technik keine Probleme macht, wuerde ich diese
grundsaetzlich _sehr_ empfehlen.
Siehe auch in meinem C++-Buch Kapitel 3.6.

-- 
Nico                             address: BREDEX GmbH, Nicolai Josuttis
email:   nico@bredex.de                   Fallersleber-Tor-Wall 23
phone:   +49 531 24330-0                  D-38100 Braunschweig
fax:     +49 531 24330-99                 Germany
Technical Details
Message-ID: <DovL10.6Lu@bredex.de>
Path: arc1-ca.pugleaf.net!news.braunschweig.pop.de!bredex!nico
References: <31486437.41C6@studi.epfl.ch> <4isqrl$s7h@zeus.rbi.informatik.uni-frankfurt.de> <pud965qak1.fsf@themroc.colibri.de> <4j2hdo$lrk@zeus.rbi.informatik.uni-frankfurt.de>

Show Full Headers
Complete Article Headers
Newsgroups: de.comp.lang.c++
Path: arc1-ca.pugleaf.net!news.braunschweig.pop.de!bredex!nico
From: nico@bredex.de (Nico Josuttis)
Subject: Re: Probleme beim Vererben von fstream
Message-ID: <DovL10.6Lu@bredex.de>
Reply-To: nico@bredex.de
Organization: Bredex GmbH
References: <31486437.41C6@studi.epfl.ch> <4isqrl$s7h@zeus.rbi.informatik.uni-frankfurt.de> <pud965qak1.fsf@themroc.colibri.de> <4j2hdo$lrk@zeus.rbi.informatik.uni-frankfurt.de>
Date: Tue, 26 Mar 1996 12:50:59 GMT