klassen verschachteln ?
-
Hi !
Ich habe eine frage zum verschachteln von objekten...
nehmen wir mal ein beispiel:class.h:
class a { public: a(void); ~a(void); int bsp1(int x); }; class b { public: b(void); ~b(void); int bsp1(int x); };class.cpp
#include "class.h" a::a() { } a::~a() { } int a::bspl(int x) { return x; } b::b() { } b::~b() { } int b::bspl(int x) { return x; }main.cpp
#include <stdio.h> #include "class.h" int main(void) { a a; b b; int y=0; int z=0; y=a.bspl(1); z=b.bspl(2); return 0; }Was ich jetzt genau vorhabe ist klasse b als member von klasse a zu benutzen..
Ich hab irgendwie keinen genauen schimmer wie ich da vor gehen müsste...
also es soll quasie folgenden code produzieren:#include <stdio.h> int main(void) { a a; // <-- bestimmt nicht ganz richtig *g* z=a.b.bspl(2); return 0; }kann mir da jemand sagen wie ich vorgehen muss ?
wenn wir schon mal bei klassen sind... was ich auch nicht verstanden habe ist ein unterschied beim initialisieren....a *a1 = new a(); delete a;vs.
a a;wo ist der genaue unterschied ?
Mfg Benny
-
Erstmal müssen Klassen und Instanzen verschiedene Namen haben, sonst weiß der Compiler nicht was du meinst. Ich schreibe Klassen groß und Variablen klein, aber das kann man machen wie man will.
Dann kannst du einfach ein B als Member von einem A deklarieren.
class A{ public: B b; //in jedem A steckt ein B A(); ~A(); int bsp1(int x); }; int main(){ A a; auto z = a.b.bspl(2); //funktioniert jetzt }Klassenobjekte sind beim initialisieren nichts besonderes, da könnte auch int stehen.
Wenn das nicht reicht:
{ A a; //a existiert von hier bis der Block {} zu Ende ist { }//Block für a nicht zu Ende } //Block für a zu Ende, a ist wegIm Gegensatz dazu forderst du mit new neuen Speicher an, der erst mit delete weg geht, sich also nicht um Blöcke kümmert. Das gilt allerdings nur für den Speicher, nicht für die Variable a1*, die verschwindet nämlich schon, weshalb man sowas in modernem C++ nicht tut.
-
perfekt , herzlichen dank !!!
Mfg Benny