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.