| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen | 
	
	
		| Autor | Nachricht | 
	
		| cyby Mini JLI'ler
 
 
 Alter: 36
 Anmeldedatum: 25.08.2004
 Beiträge: 12
 Wohnort: Tauberischofsheim
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.11.2007, 11:05    Titel: wo Struktur von einer Klasse initialisieren ? |   |  
				| 
 |  
				| hallo, 
 wo initialisiert man am besten eine Struktur von einer Klasse ?
 
 
  	  | CPP: |  	  | class CTestClass {
 
 CTestClass;  //Konstruktor
 ~CTestClass;  //Destruktor
 
 struct Mouse
 {
 int m_X
 int m_Y
 };
 
 }
 | 
 
 Habe es bei meinem Programm in der Klasse selber gemacht, aber das kommt mir etwas komisch vor.
 Logisch wäre es für mich im Konstruktor, aber dann findet das Programm die Variablen von der Klasse nicht
   Muss man die Struktur auch wieder freigeben oder macht dies C++ automatisch ?
 
 MfG, cyby
 _________________
 Wenn jemand Rechtschreibfehler findet oder Fachausdrücke falsch geschrieben sind, mir bitte per PN mitteilen! (Übung macht den Meister xD )
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Jonathan_Klein Living Legend
 
  
 Alter: 38
 Anmeldedatum: 17.02.2003
 Beiträge: 3433
 Wohnort: Siegerland
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.11.2007, 11:24    Titel: |   |  
				| 
 |  
				| Alles was nicht am Heap ist, (also mit new erzeugt wurde) musst du nicht wieder freigeben. Alles was du mit new erzeugt hast, solltest du mit delete freigeben. 
 
 öhm, evtl. könntest du es mal so probieren:
 
  	  | CPP: |  	  | struct SMouse {
 int m_X
 int m_Y
 };
 
 class CTestClass
 {
 
 CTestClass():  //Konstruktor
 Mouse.m_X(0),
 Mouse.m_Y(0)
 {
 //anderer Kram
 }
 ~CTestClass;  //Destruktor
 
 SMouse Mouse;
 
 
 };//WICHTIG nie das ; am Ende einer Klasse vergessen :D
 
 | 
 
 Strukturen in Klassen hab ich noch nicht benutzt mag gut sein, dass deine erste Lösung auch irgendwie geht. Ansonsten könntest du auch einfach die Struktur weglassen, aber ich gehe mal davon aus, dass deine echt Klasse bisschen größer ist, und es deshalb der Übersicht dient.
 _________________
 https://jonathank.de/games/
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Maxim Senior JLI'ler
 
 
 
 Anmeldedatum: 28.03.2004
 Beiträge: 249
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.11.2007, 12:08    Titel: |   |  
				| 
 |  
				| wenn du deine struktur in der klasse verwenden willst, dann musst du zuvor eine instanz von der struktur erstellen. 
 wie ich dich verstanden habe, hast du so was ausprobiert:
 
 
  	  | Code: |  	  | class CTestClass {
 
 CTestClass() //Konstruktor
 {
 m_X = 0;
 m_Y = 0;
 }
 
 ~CTestClass();  //Destruktor
 
 struct Mouse
 {
 int m_X
 int m_Y
 };
 
 };
 | 
 
 das geht natürlich nicht
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| GreveN JLI Master
 
  
 Alter: 38
 Anmeldedatum: 08.01.2004
 Beiträge: 901
 Wohnort: Sachsen - Dresden
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.11.2007, 12:21    Titel: |   |  
				| 
 |  
				| Ganz einfach, dafür gibts Initialisierungslisten, du rufst praktisch im Konstruktor einer Klasse/Struktur die Konstruktoren aller Member bzw. Super-Klassen auf. 
 Beispiel:
 
  	  | CPP: |  	  | struct foo {
 foo(int x, int y)        // Der Konstruktor der Rahmenklasse nimmt 2 Integer entgegen...
 : barbar(x, y)       // ...und ruft den Konstruktor des Members "barbar" auf.
 {}
 
 
 struct bar
 {
 bar(int x, int y)    //"barbar" ist eine Instanz von "bar", welche über diesen Konstruktor verfügt
 : a(x), b(y)     // Die beiden Member "a" und "b" werden wiederrum initialisiert
 {}
 
 int a, b;
 };
 
 bar barbar;
 };
 | 
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Faller Junior JLI'ler
 
 
 Alter: 37
 Anmeldedatum: 30.11.2006
 Beiträge: 88
 Wohnort: Dresden
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 12.11.2007, 14:07    Titel: |   |  
				| 
 |  
				| wau da gibts ja echt viele lösungs ansätze also ich mache es immer so in der header datei erst die structs dann kann alles in der klasse darauf zugreiffen 
 
  	  | CPP: |  	  | struct test {
 int i;
 };
 
 class kind
 {
 private:
 test geburt;
 public:
 kind();
 ~kind();
 
 };
 
 kind::kind()
 {
 geburt.i=0;
 }
 
 
 | 
 _________________
 versuche alles nur wann und wie ist die frage
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Fallen JLI MVP
 
  
  
 Alter: 41
 Anmeldedatum: 08.03.2003
 Beiträge: 2860
 Wohnort: Münster
 Medaillen: 1 (mehr...)
 
 
 | 
			
				|  Verfasst am: 12.11.2007, 18:23    Titel: |   |  
				| 
 |  
				| Warum nicht gleich so? 
 
  	  | CPP: |  	  | struct test {
 test()
 :i(0)
 {  }
 
 int i;
 };
 
 class kind
 {
 private:
 test geburt;
 public:
 kind();
 ~kind();
 
 };
 | 
 _________________
 "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Deviloper Junior JLI'ler
 
 
 
 Anmeldedatum: 31.05.2006
 Beiträge: 77
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 13.11.2007, 21:24    Titel: |   |  
				| 
 |  
				| Naja es kommt immer darauf an, wenn man eine struct nur in einer Klasse haben will, dann gehört das in die Klasse. 
 Einigen scheint nicht ganz klar zu sein, dass eine struct identisch mit einer class ist (in C++). Der Unterschied liegt darin, dass die Standardzugriffsrechte auf public(bei struct) oder auf private(bei class) stehen:
 
 Bei obj_foo.data wird er meckern dass data private ist. 	  | CPP: |  	  | template <typename T> class foo
 {
 T data;
 
 public:
 foo(T const& data) : data(data) {}
 };
 
 template <typename T>
 struct bar
 {
 T data;
 bar(T const& data) : data(data) {}
 };
 
 int main()
 {
 bar<int> obj_bar(10);
 foo<int> obj_foo(10);
 std::cout << obj_bar.data << obj_foo.data << std::endl;
 }
 | 
 
 Eine struct (kann) hat also folglich auch operatoren, Funktionen, Konstruktor, Destruktor usw.!
 
 
 usw sollte auch gehen 	  | CPP: |  	  | template <typename T, typename R, typename P1> struct call_func
 {
 typedef R(T::*fnPtr)(P1 const&);
 T const& obj;
 fnPtr func;
 call_func(T const& obj, fnPtr ptr) : obj(obj), func(ptr) {} // { c-tor }
 R operator()(P1 const& data) const { return (obj.*func)(data); } // operator()
 };
 
 class foo
 {
 int data;
 
 public:
 foo(int const& data) : data(data) {}
 void bar(int const& data) { this->data = data; }
 friend std::ostream& operator << (std::ostream& out, foo const& data) { return out << data.data; }
 };
 
 int main()
 {
 foo inst_foo(100);
 std::cout << inst_foo << std::endl;
 call_func<foo, void, int> call_inst(inst_foo, &foo::bar);
 call_inst(10);
 std::cout << inst_foo << std::endl;
 }
 | 
  
 Zuletzt bearbeitet von Deviloper am 14.11.2007, 13:27, insgesamt 2-mal bearbeitet
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Faller Junior JLI'ler
 
 
 Alter: 37
 Anmeldedatum: 30.11.2006
 Beiträge: 88
 Wohnort: Dresden
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 14.11.2007, 11:16    Titel: |   |  
				| 
 |  
				| An Fallen 
 
  	  | CPP: |  	  | struct test {
 test()
 :i(0)
 {  }
 
 int i;
 };
 
 | 
 
 sach ma baust du hier für den struct nen konstruktor.
 ich dachte das geht nur für klassen.
 oder macht das absolut keinen unterschied.
 
 kann man in structs funktionen einbinden??
   
 mfg Faller
 _________________
 versuche alles nur wann und wie ist die frage
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| GreveN JLI Master
 
  
 Alter: 38
 Anmeldedatum: 08.01.2004
 Beiträge: 901
 Wohnort: Sachsen - Dresden
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 14.11.2007, 12:37    Titel: |   |  
				| 
 |  
				| Ja, siehe Devilopers Posting. |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Jonathan_Klein Living Legend
 
  
 Alter: 38
 Anmeldedatum: 17.02.2003
 Beiträge: 3433
 Wohnort: Siegerland
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 14.11.2007, 13:20    Titel: |   |  
				| 
 |  
				| 3, 2, 1: So langsam sollte cyby mehr Lösungen und Möglichkeiten für sein Problem haben, wie er benutzen kann  _________________
 https://jonathank.de/games/
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		|  |