Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage zu public-Vererbung von protected-Mitgliedern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.09.2006, 20:57 Uhr
Yadgar



High!

Wenn ich die Ausführungen im Lehrbuch richtig verstanden habe, bewirkt der Zugriffsmodus "protected" bei public-Vererbung, dass die betreffende Methode bzw. Mitgliedsvariable zwar für "Außenstehende" unzugänglich ist, sehr wohl aber innerhalb der abgeleiteten Klasse verwendet werden kann.

Wieso bekomme ich aber dann für diesen Code:


C++:
// Wandlungen bei nicht-öffentlich abgeleiteten Klassen
// (AUPPERLE, S. 644ff)

#include <iostream>
using namespace std;

struct A
{
   protected:
   int i, j, k;
   void doIt();
   A();
};

A::A()
{
   cout << "Neues A-Objekt erzeugt!" << endl;
}



void A::doIt()
{
   cout << "a::doIt() ausgef" << (char)129 << "hrt!" << endl;
}

struct B : public A
{
   string name;
   void doIt();
};

void B::doIt()
{
   A::doIt();
   i=3;
   j=4;
   k=5;
   cout << "Zugriff auf i, j, k!" << endl;
   A a;
}

int main()
{
   B b;
   b.doIt();
//   A a;
//   b.j=5;
}



die Fehlermeldung "A::A() is protected" - obwohl durch protected B::doIt den Konstruktor doch benutzen können müsste?

...eine Seite weitergeblättert: ah, ich sehe schon - Konstruktoren werden gar nicht vererbt! Dann ist die Sache natürlich klar...

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog

Dieser Post wurde am 05.09.2006 um 20:59 Uhr von Yadgar editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.09.2006, 22:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
evtl solltest du nicht "struct" benutzen, das ist unsauber. benutze "class" und setz ein public: dann rein wo du es brauchst.

Ansonsten sollte die Fehlermeldung imho da bei


C++:
B b;



kommen, da B keinen public konstruktor mehr hat (durch die vererbung)
--
class God : public ChuckNorris { };

Dieser Post wurde am 05.09.2006 um 22:30 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.09.2006, 22:58 Uhr
Spacelord
Hoffnungsloser Fall


Was ist denn an struct unsauber?

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.09.2006, 08:45 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Spacelord:
Was ist denn an struct unsauber?

MfG Spacelord

naja struct ist so C-Stil
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: