C++ lernen verschachtelte Ob

Gast #1119223
Hallo ich lerne gerade C++

ich hab mir folgendes Programm ausgedacht es funktioniert zwar ergibt 
aber keinen Sinn da es nur zum üben ist!


#include <iostream>
using namespace std;

class A //Base
{
public:
  A() {};
    A(int x) {a_a = x; }

  int agetdaten(){return a;}


  int asetdaten(int x){a = x; return 0;}

  int asetdatenbase(int x){publica = x; return 0;}

  int publica;

private:
   int a,a_a,aaaa;
};

//**********************************************************************

class B : public A //abgeleitete Klasse
{
public:
  B() {};
  B(int x) {b_b = x; }

    int ergenzeamitb(int x){publica = publica + x; return 0;}
  void aenderea() {asetdaten(6); publica = 66;}
  int getbekommeDatena () {return publica;}
    int bgetdaten(){return b;}
  int bsetdaten(int x){b = x; return 0;}
private:
   int b, b_b;
};
//**********************************************************************
class C
{
public:
  //C() {};
  C(int x = 0) :ac(x) {c_c = x; }

    int cgetdaten(){return c;}
  int csetdaten(int x){c = x; return 0;}


private:
  A ac; //Verschachteltes Ob
   int c,c_c;
};

//**********************************************************************

int main(void)
{
   A u;
   A uu(5);
   u.asetdaten(5);

   B v;
   B (5);
   v.aenderea();
   cout <<  v.getbekommeDatena() << "das geht !" << v.publica ;
   v.bsetdaten(5);

   C w;
   C ww(5);
   w.csetdaten(5);
   w.ac
   v.asetdatenbase(10); //in der Base Klasse
   v.ergenzeamitb(22);

   cout << v.getbekommeDatena();
   return 0;
}


 Wie kann ich das verschachtelte Obiekt in Klasse C ansprechen?
welche Metoden muss ich dazu in Klasse A und C definieren.
Thorsten wrote:

>  Wie kann ich das verschachtelte Obiekt in Klasse C ansprechen?

Von wo aus?


von main() aus?
Im besten Fall gar nicht.
Das C Objekt verwaltet as ac Objekt. Daher solle es dafür zuständig
sein, Funktionsaufrufe weiterzugeben.


class C
{
   ....

   void SetACDaten( int x )     { ac.asetdaten( x ); }

   ...
}

und in main dann:


    ....
    w.SetACDaten( 8 );
    ...

> welche Metoden muss ich dazu in Klasse A und C definieren.

Obiges geht zwar immer, ist aber oftmals mühsam. Man müsste sonst in C 
viel zu viele Funktionen machen, die nichts anderes tun, als ihre 
Argumente an die Memberobjekte weiterzugeben.

Also baut man sich eine Funktion, mit der man von aussen auf das 
eingebettete A Objekt per Referenz rankommt.

class C
{
   ....

   A& getA()         { return ac; }
   ...
};

und kann dann schreiben

  ...
  w.getA().asetdaten( 8 );
  ...
Gast
Gemacht hab es jetzt mal so


#include <iostream>
using namespace std;

class A //Base
{
public:
  A() {};
  A( char * ttt){  for (int i = 0;i< 4;i++) { cout << *ttt; ++ttt;}}
    A(int x) {a_a = x; }

  int agetdaten(){return a;}


  int asetdaten(int x){a = x; return 0;}

  int asetdatenbase(int x){publica = x; return 0;}
  void bekommeDatenfuerac(){cout << "ich bins";}
  int publica;

private:
  char *ist;
   int a,a_a,aaaa;
};

//**********************************************************************

class B : public A //abgeleitete Klasse
{
public:
  B() {};
  B(int x) {b_b = x; }

    int ergenzeamitb(int x){publica = publica + x; return 0;}
  void aenderea() {asetdaten(6); publica = 66;}
  int getbekommeDatena () {return publica;}
    int bgetdaten(){return b;}
  int bsetdaten(int x){b = x; return 0;}


private:
   int b, b_b;
};
//**********************************************************************
class C
{
public:
  //C() {};
  C(int x = 0) :ac(x) {c_c = x; }

    int cgetdaten(){return c;}
  int csetdaten(int x){c = x; return 0;}
  int arbeitemitobac(){ac.bekommeDatenfuerac(); ac.publica = 7 ; return 
0;}
  int getac() {cout << ac.publica; return 0;}
private:
  A ac; //Verschachteltes Ob
   int c,c_c;
};

//**********************************************************************

int main(void)
{
   ...
  C w
    w.csetdaten(5);
   w.getac();
    A ddd("gg\n");
  A m;
  A *dddd = &m;




   cout << v.getbekommeDatena();
   return 0;
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.