Kontrucktorprobleme -> Vererbung und "hat ein Beziehungen"



  • Hallo!

    Habe ein neues Problem, welches zumindest nicht von mir gelöst werden kann 😞

    Ich habe beispielsweise eine
    class Steuerung
    Stadt Darmstadt;

    eine
    class Stadt
    Rathaus itsRathaus;

    eine
    class Gebäude
    int anzBeamte;
    void Set_anzBeamte(int);

    und eine
    class Rathaus (Vererbung) public Gebäude
    Rathaus() { Set_anzBeamte(10) }
    void Beamte_machePause();
    void Beamte_trinkeKaffe();
    void Beamte_laufeSinnlosTreppeHochUndRunterHauptsacheManSiehtBeschäftigtAus();

    Das Objekt von Steuerung hat mehrere Objekte Stadt.
    Eine Stadt hat wiederum mehrere Gebäude, in dem Fall zumindest ein ein Rathaus.

    Das Problem:
    Ich kann Alle Objekte erzeugen. Aber ich bekomme eine Fehlermeldung vom Compiler wenn ich Elementvariablen von GEBÄUDE im Konstrucktor von Rathaus initialisiere:
    error C2248: "Rathaus::Rathaus" : Kein Zugriff auf private Element, dessen Deklaration in der Klasse "Rathaus" erfolgte. Siehe Deklaration von Rathaus.

    OK! Was sagt mir das? Und vor Allem was sagt es euch (außer das Beamte immer VOID zurück geben 😃 )??

    Danke im Voraus



  • Hallo,
    um die Elementvariablen einer Basisklasse von einer abgeleiteten Klasse zu initialisieren kann man

    den entsprechenden Konstroktor der Basisklasse aufrufen
    eine als public oder protected deklarierte Funktion aufrufen

    Wenn die Elementvariable der Basisklasse public oder protected ist kanns auch direkt auf die zugreifen

    hoff das konnte dir helfen

    mfg
    socky



  • Moin,

    In einer C++-Klasse sind die Member per default private, das heißt, nur die Klasse selbst kann darauf zugreifen. Du hast die Möglichkeit, das explizit zu ändern, indem du die Member public oder protected deklarierst. public heißt, jeder darf darauf zugreifen, protected heißt, die Klasse selbst und von ihr abgeleitete Klassen dürfen darauf zugreifen. Also in deinem Fall:

    class Gebaeude {
    protected:
      int anzBeamte;
    };
    

    Ich würde an deiner Stelle auch die Methoden public deklarieren, damit du sie nachher benutzen kannst.



  • SUPER! DANKSCHÖN!!
    Ihr habt mir beide geholfen.
    Das lustige ist, dass ich die schon Protected hatte. Habe es aber jetzt erst richtig kappiert und hatte einfach nur einen falschen Syntax.Der Compiler hat mich nur völlig falsch verstanden!?

    DANKE


Anmelden zum Antworten