🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Probleme beim Vererben von fstream

#1891
From: Dietmar Kuehl
Date: Sun, 24 Mar 1996 18:49
71 lines
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!kuehl
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
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]