🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Pointerfrage

#1518
From: Nico Josuttis
Date: Mon, 05 Feb 1996 16:04
53 lines
2385 bytes
In article <Pine.A32.3.91.960205125307.49193A-100000@papin.hrz.uni-marburg.de>,
Saggau Henning  <saggauh@uni-marburg.de> wrote:
>Also ich hab da mal ne Frage.
>In dem Buch von Lippman sind Beispiele angegeben, bei denen Jeweils der 
>Rueckgabewert eine Referenz ist.
>int& foo::operator[](int i){
>.....
>	return Element[1];
>}
>So in diesem Beispiel wird der Wert selber beim return angegeben.
>
>foo& foo::operator=(const foo& f){
>.....
>	return *this;
>}
>hier wird der Pointer angegeben.
>
>Wie entscheide ich nun, wenn ich eine Referenz zurueckgeben moechte, ob 
>ich den Pointer oder das Element zuueckgebe?
>
>Thanx
>Henning

Sorry Henning, aber Deine Frage klingt so, als haettest Du einiges
noch nicht verstanden.
Ich versuche mal, aufzuklaeren:
 1.) *this ist das, worauf der Pointer this zeigt, also das
     Objekte, fuer das die Zuweisung aufgerufen wurde.
 2.) Element[0] ist auch das, worauf der Pointer (jedes Array
     ist als Typ ein Pointer) zeigt (auch: *Element).
     Element[1] ist das Element dahinter (auch: *(Element+1)).
Insofern wird in beiden Faellen kein Pointer zurueckgegeben.

Vergiss erstmal Referenzen, denn Referenzen sind vom Typ her nicht
vorhanden und bedeuten lediglich KEINE KOPIE.
Programmier erstmal ohne Referenzen und ueberlege Dir dann, ob
das, was zurueckgeliefert wird im Original oder als Kopie
zurueckgeliefert werden soll. Es muss immer eine Kopie sein,
wenn es etwas Lokales ist (sonst wird etwas zurueckgeliefert, was
es gar nicht mehr gibt).

Und denke bitte bei Referenzen NICHT an Zeiger.
Referenzen sind einfach "zweite Namen", die dazu dienen,
das Anlegen von Kopien zu vermeiden
(siehe auch mein Buch, "Objektorientiertes Programmieren in C++",
 Kapitel 3.5).

Tschau
-- 
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: <DMB8ns.AC5@bredex.de>
Path: arc1-ca.pugleaf.net!news.braunschweig.pop.de!bredex!nico
References: <Pine.A32.3.91.960205125307.49193A-100000@papin.hrz.uni-marburg.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: Pointerfrage
Message-ID: <DMB8ns.AC5@bredex.de>
Reply-To: nico@bredex.de
Organization: Bredex GmbH
References: <Pine.A32.3.91.960205125307.49193A-100000@papin.hrz.uni-marburg.de>
Date: Mon, 5 Feb 1996 16:04:39 GMT