Article View: de.comp.lang.c++
Article #1891Re: Probleme beim Vererben von fstream
From: Dietmar Kuehl
Date: Sun, 24 Mar 1996 18:49
Date: Sun, 24 Mar 1996 18:49
71 lines
2809 bytes
2809 bytes
Hi,
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.
: Der Unterschied zwischen
: class Unkonventionell
: {
: ..
: ostream & operator<< (ostream &);
: ..
: };
: und
: class Normal
: {
: ..
: friend ostream & operator<< (ostream &, Normal &);
: ..
: };
: liegt darin, dass erstere zu einer wahrscheinlich nicht gewollten
: Verhaltensweise fuehrt (was natuerlich m/reine Spekulation ist):
[deleted]
Du hast offensichtlich den Einwand von Harald Fuchs nicht verstanden.
Er sagt NICHT, dass der Inserter ein Member sein soll, sondern er sagt,
dass es nicht notwendigerweise ein 'friend' sein muss: Wenn der
Inserter nicht auch 'private' oder 'public' member zugreifen muss, dann
braucht er auch kein 'friend zu sein. z.B. kann man eine 'public'
Funktion 'print(ostream &)' definieren, die vom Inserter aufgerufen
wird. Es gibt dann ueberhaupt keinen Grund, den Inserter einen 'friend'
sein zu lassen und trotzdem kann man die gewohnte Syntax zum schreiben
in ein 'ostream' beibehalten. Hier ist ein Codebeispiel, dass das
demonstriert:
#include <iostream.h>
class foo
{
private:
int val;
public:
foo(int v): val(v) {}
ostream &print(ostream &out) const { return out << "foo::val(" << val << ")"; }
};
ostream &operator<< (ostream &out, foo const &f) { return f.print(out); }
An dem Inserter ist nichts unkonventionell und trotzdem ist er kein
'friend'.
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl
I am a realistic optimist - that's why I appear to be slightly pessimistic
Technical Details
Message-ID:
<4j45fd$dbf@news.BelWue.DE>Path:
arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehlReferences:
<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
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl From: kuehl@uzwil.informatik.uni-konstanz.de (Dietmar Kuehl) Newsgroups: de.comp.lang.c++ Subject: Re: Probleme beim Vererben von fstream Date: 24 Mar 1996 18:49:17 GMT Organization: Fakultät für Mathematik und Informatik Message-ID: <4j45fd$dbf@news.BelWue.DE> 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> Reply-To: dietmar.kuehl@uni-konstanz.de NNTP-Posting-Host: uzwil.informatik.uni-konstanz.de X-Newsreader: TIN [version 1.2 PL2]