Article View: de.comp.lang.c++
Article #844Re: Frage zu "protected"
From: Enno Sandner
Date: Tue, 21 Nov 1995 20:23
Date: Tue, 21 Nov 1995 20:23
58 lines
2368 bytes
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!ennoReferences:
<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