🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Frage zu "protected"

#844
From: Enno Sandner
Date: Tue, 21 Nov 1995 20:23
58 lines
2368 bytes
just@TUDURZ.urz.tu-dresden.de (Gerald Just Physik ASB TUDR):
>z.Z. habe ich ein kleines Problem mit der Sichtbarkeit
>einer Variablen. Im Buch C++ Lernen von Tom Swan (Systhema Verlag)
>wird eine Klasse fuer Listen aus einer Klasse item abgeleitet:
>
>class item{
>	protected:
>		item *left;
>		item *right;
>	public:
>		item();
>		item *link(item *);
>		void unlink();
>	};
>
>class list:public item{
>	private: item *anchor;
>		 item *cip;
>	public: .
>		.
>		.
>                int atEnd(void){return((anchor!=NULL)&&(cip==anchor->left));}
>		.
>		.
>			};
>Fuer diese Sache bringen DJGPP, MS und Borland die Meldung, dass anchor->left
>protected ist und nicht zur Verfuegung steht.
>
>Der Zortech uebersetzt das problemlos.

Die Mehrheit hat in diesem Fall recht.
Eine als protected deklarierte Variable einer Basisklasse laesst sich nur
ueber einen Pointer (oder Referenz) auf die Subklasse ansprechen.
In diesem Fall wird in der Subklasse 'list' von 'item' versucht, ueber
einen Pointer auf eine 'item'-Instanz auf die Variable 'left' zuzugreifen,
was unzulaessig ist. Das ist zunaechst etwas verwirrend, laesst sich aber 
leicht motivieren:
Es waere ansonsten moeglich, dass sich unabhaengige Klassen gegenseitig als
protected deklarierte Variablen veraendern:

        class Base { protected: int i; };
        class Der1 : public Base {};
        class Der2 : public Base {
                public:
                void f(Base& b) { b.i=4711; }
        };

        Der1 d1;
        Der2 d2;
        d2.f(d1); 

In der letzten Zeile wuerde innerhalb der D2-Instanz, die in D1 als protected
deklarierte Variable 'i' veraendert, obwohl D1 und D2 zueinander in keinerlei
Beziehung stehen.
Das ganze ist ziemlich gut im ARM dargestellt (11.5 'Protected Member Access').

	Gruss
		Enno
Technical Details
Message-ID: <ENNO.95Nov21212322@kitz.inferenzsysteme.informatik.th-darmstadt.de>
Path: arc1-ca.pugleaf.net!news.th-darmstadt.de!news!enno
References: <just.816962445@TUDURZ>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.th-darmstadt.de!news!enno
From: enno@inferenzsysteme.informatik.th-darmstadt.de (Enno Sandner)
Newsgroups: de.comp.lang.c++
Subject: Re: Frage zu "protected"
Date: 21 Nov 1995 20:23:22 GMT
Organization: Fachbereich Informatik, TH Darmstadt
Message-ID: <ENNO.95Nov21212322@kitz.inferenzsysteme.informatik.th-darmstadt.de>
References: <just.816962445@TUDURZ>
NNTP-Posting-Host: kitz.intellektik.informatik.th-darmstadt.de
In-reply-to: just@TUDURZ.urz.tu-dresden.de's message of 21 Nov 95 14:00:45 GMT