Du bist nicht eingeloggt.

Login

Pass

Registrieren

Community
Szene & News
Locations
Impressum

Forum / Bits und Bytes

protected in ancestor class - C++

cylence - 32
Anfänger (offline)

Dabei seit 07.2012
7 Beiträge
Geschrieben am: 05.06.2014 um 08:18 Uhr

Hallo zusammen,

ich hätte da mal eine Frage bezüglich inheritance.

Angenommen es gibt eine base class A, eine davon derived class B (child, subclass of A) und eine davon derived class C (grandchild of A):

class A
{
protected:
char a;
};

class B: public A
{};

class C: public B
{};

Protected member variables werden laut definition der direkten nächsten derived class zugänglich gemacht. Es kann also direkt ohne eine spezielle getter oder setter methode auf diese variable von B aus zugegriffen werden. Gilt dies denn auch für C?

Ich sitze hier gerade vor einem C++ buch, welches behauptet, dies gilt nur für die direkte subclass. Eine Notiz meines Professors lautet wie folgt:

Tut mir Leid ist auf Englisch (bin an der University of California)

A third choice is protected member access
Only subclasses (those derived from this one) can access
Some consider it bad OOP practice – violates info hiding

Ich habe das ganze Szenario mal ausprobiert. Doch meine class C hat ebenfalls direkten zugriff auf diese variable...wie kann das sein? Interpretiere ich seine Notiz falsch?...

Danke für eure Hilfe.
Apex91 - 34
Anfänger (offline)

Dabei seit 07.2013
13 Beiträge
Geschrieben am: 05.06.2014 um 14:26 Uhr

Was genau hält dich denn davon ab es einfach kurz auszuprobieren?

Vererbung ist, soweit ich weiß in allen objektorientierten Sprachen ein transitives Konzept.
Das heißt, wenn C von B erbt und B von A erbt, dann erbt C auch von A.
Deshalb hat auch C problemlosen Zugriff auf protected-Attribute von A.

[zustimmen2 Personen stimmen diesem Beitrag zu:
smasher, cylence, ... mehr anzeigen

Madman - 36
Profi (offline)

Dabei seit 02.2005
435 Beiträge

Geschrieben am: 05.06.2014 um 15:39 Uhr

Zitat von Apex91:

Was genau hält dich denn davon ab es einfach kurz auszuprobieren?

Vererbung ist, soweit ich weiß in allen objektorientierten Sprachen ein transitives Konzept.
Das heißt, wenn C von B erbt und B von A erbt, dann erbt C auch von A.
Deshalb hat auch C problemlosen Zugriff auf protected-Attribute von A.
Nicht nur da, das ist ein allgemeingültiger kausaler Zusammenhang, alles andere wäre unlogisch.

[zustimmen1 Person stimmt diesem Beitrag zu:
cylence, ... mehr anzeigen


Ich hasse Vegetarier !! Die essen meinem Essen das Essen weg

ItsPayne - 40
Profi (offline)

Dabei seit 12.2008
997 Beiträge

Geschrieben am: 05.06.2014 um 22:31 Uhr
Zuletzt editiert am: 05.06.2014 um 22:35 Uhr

Macht doch sinn, dass alle Kinder zugriffe auf die protected member haben.

Es geht bei der ganzen Geschichte ja darum vom allgemeinen (Class A) immer spezifischer zu werden (Class D).

das Spezifische muss Zugriff auf das Allgemeine haben, da sich alle das Allgemeine Teilen.

Letztendlich ist das doch auch der Grundsatz nachdem Klassen und Strukturen aufgebaut werden sollten.

Der Zweck der Übung ist ja nicht so viel wie möglich zu vererben, sondern sinnvoll zu strukturieren.
Und das ist letztendlich in der Praxis auch die Herausforderung und nicht das bisschen Tier - Hase - Fuchs zu verstehen.

[zustimmen1 Person stimmt diesem Beitrag zu:
cylence, ... mehr anzeigen


Wenn du lange genug in einen Abgrund blickst, blickt der Abgrund auch in dich hinein.

cylence - 32
Anfänger (offline)

Dabei seit 07.2012
7 Beiträge
Geschrieben am: 07.06.2014 um 02:51 Uhr

Ja, ich gebe euch allen Recht! Ich finde nur, dass es ganz allgemein gesprochen eine "schlechte" objekt orientierte Philosophie ist, den accessor protected überhaupt zu verwenden.

Dann doch lieber private mit set/get functions :)
ItsPayne - 40
Profi (offline)

Dabei seit 12.2008
997 Beiträge

Geschrieben am: 07.06.2014 um 03:30 Uhr

Jein, der Lehrbuch Stil wäre innerhalb der Erblinie für Member protected zu verwenden und nach außen hin mit public get/set Funktionen zugriff auf den Member zu erlauben, wenn es ein Parameter ist der von außen zugreifbar sein muss.

Wenn du lange genug in einen Abgrund blickst, blickt der Abgrund auch in dich hinein.

  [Antwort schreiben]

Forum / Bits und Bytes

(c) 1999 - 2025 team-ulm.de - all rights reserved - hosted by ibTEC Team-Ulm

- Presse - Blog - Historie - Partner - Nutzungsbedingungen - Datenschutzerklärung - Jugendschutz -