nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Re: templates und vererbung

Von: Daniel Krügler (daniel.kruegler@googlemail.com) [Profil]
Datum: 01.05.2008 19:12
Message-ID: <29a55c0c-423a-4716-8ebd-dfde815be5f0@x35g2000hsb.googlegroups.com>
Newsgroup: de.comp.lang.iso-c++
On 30 Apr., 19:10, ruebezaehler <ruebezaeh...@web.de> wrote:
> Am Wed, 30 Apr 2008 17:18:23 +0200 schrieb ruebezaehler:
> > ich habe ein Problem bei der Vererbung von Klassen-Templates.
>
> > Im Beispiel ist eine Basis-Klasse C_B_, welche nur ein oeffentliches
> > Datum var enthaelt. Die Klasse C_B ist von C_B_ private abgeleitet.
> > Trotzdem ist var vom Benutzer ueber C_B zugaenglich. Das gilt nicht fuer

> > die Klasse C_A. Hier kann die Sichtbarkeit fuer den Benutzer von C_A
> > nicht nur ueber die Sichtbarkeit von C_A_, sondern auch die Variable var

> > mittels "private: / public: using C_A_::var;" gesteuert werden.
>
> > Hinweis: Compiler g++ (GCC) 4.1.3
>
> > Kann mir jemand weiterhelfen bzw. die verschiedene Behandlung des
> > Compilers erklaeren.
>
> Nachtrag:
>
> wenn man B (C_B) ohne "using" deklariert, dann verhaelt sie sich wie A
> (C_A)

Das Compilerverhalten bezueglich B ist ein eindeutiger
Compilerfehler und sollte als solcher berichtet werden.

Durch die using-Deklaration im private-Abschnitt der Klasse
wird der Name "var" im privaten Bereich der Klasse
eingefuehrt/deklariert. D.h. ein Benutzer der Klasse mit Nur-
public-Zugriff (wie in deinem Bsp. innerhalb von main) darf
auf B<..>::var nicht zugreifen, siehe [namespace.udecl]/15:

"The alias created by the using-declaration has the usual
accessibility for a member-declaration.[..]"

Gruss aus Bremen,

Daniel Krügler

[ Auf dieses Posting antworten ]