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 ); ...
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; }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.