🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Frage zum friend-Konzept in C++

#908
From: Martin Aupperle
Date: Tue, 28 Nov 1995 12:47
73 lines
2672 bytes
MERLEAU@merleau.prima.ruhr.de (Roger Wegner) wrote:

>Hallo allerseits,

>ich habe eine Frage bezüglich des friend-Konzepts in C++. Ich möchte eine Ele-
>mentfunktion einer Klasse B zum Freund einer Klasse A erklären. Klasse B  
>wird aber erst nach Klasse A definiert (mal angenommen, das ist wirklich  
>nicht zu ändern...).

>Es soll vermieden werden, daß die gesamte Klasse B zum Freund von A wird. Eine
>Vorausdeklaration der Elementfunktion wird nicht akzeptiert, da dabei ja  
>schon vom Typ B gebraucht gemacht wird.

>Vorausgesetzt, ich habe da nichts mißverstanden, behauptet Lippman in
>"C++, Einführung und Leitfaden" (2. dt. Ausgabe, S. 265 unten), daß die  
>gesamte Klasse B zum Freund von A werden muß. Das kann doch nicht sein,  
>oder?

Interessante Frage. Ich nehme an, daß in etwa folgendes gemeint ist:

class B;

class A  {

  friend void B::foo();

  };

mit nachfolgender Definition von B. 
Die friend-Deklaration ist IMHO nicht möglich, da foo kein Mitglied
von B ist (den Informationsstand des Compilers vorausgesetzt). 
Dies als Fehler zu betrachten ist außerdem sinnvoll, denn was sollte
man von der - dann auch legalen - Konstruktion 

class B;

class A  {

  friend void B::foo() { cout << "hello" << endl; }

  };

halten? Soll man nun etwa

  B b;
  b.foo();

schreiben können? Sicher NICHT! Denn die Mitglieder, die eine Klasse
enthält, sollten ausschließlich in der Klassendefinition stehen. Man
stelle sich vor, wie man (d.h. ein Compiler oder ein Entwickler) sonst
die Mitglieder einer Klasse feststellen könnte - vielleicht befindet
sich A in einem anderen Modul? Es gibt Programme mit mehr als 100
Modulen.....

Es ist also klar, daß B vollständig vor A zu definieren ist. Nun kommt
wieder das alte Problem: A braucht B und B braucht A... 
DIES IST EIN DESIGN-Fehler! Vielleicht postest Du Deinen jetzigen
Ansatz etwas ausführlicher, und wir werden sehen, was man machen kann.



So long...





------------------------------------------------
Martin Aupperle
100754.2730@compuserve.com
OOA,OOD,OOP with C++, courses,trainig,coaching,C++-books
resources available. email for info
------------------------------------------------
Technical Details
Message-ID: <49f0n6$2ge@dub-news-svc-4.compuserve.com>
Path: arc1-ca.pugleaf.net!news.compuserve.com!newsmaster
References: <5yDZrjT0jmB@merleau.prima.ruhr.de>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.compuserve.com!newsmaster
From: 100754.2730@compuserve.com (Martin Aupperle)
Newsgroups: de.comp.lang.c++
Subject: Re: Frage zum friend-Konzept in C++
Date: Tue, 28 Nov 1995 12:47:19 GMT
Organization: CompuServe Incorporated
Message-ID: <49f0n6$2ge@dub-news-svc-4.compuserve.com>
References: <5yDZrjT0jmB@merleau.prima.ruhr.de>
NNTP-Posting-Host: dd42-141.compuserve.com
X-Newsreader: Forte Free Agent v0.56