JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=4a83f89a156c244aad68055aad8b4128Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

wo Struktur von einer Klasse initialisieren ?

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
cyby
Mini JLI'ler


Alter: 35
Anmeldedatum: 25.08.2004
Beiträge: 12
Wohnort: Tauberischofsheim
Medaillen: Keine

BeitragVerfasst am: 11.11.2007, 11:05    Titel: wo Struktur von einer Klasse initialisieren ? Antworten mit Zitat

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 Sad
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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.11.2007, 11:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Maxim
Senior JLI'ler



Anmeldedatum: 28.03.2004
Beiträge: 249

Medaillen: Keine

BeitragVerfasst am: 11.11.2007, 12:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 11.11.2007, 12:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 12.11.2007, 14:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 12.11.2007, 18:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Deviloper
Junior JLI'ler



Anmeldedatum: 31.05.2006
Beiträge: 77

Medaillen: Keine

BeitragVerfasst am: 13.11.2007, 21:24    Titel: Antworten mit Zitat

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:
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;
}
Bei obj_foo.data wird er meckern dass data private ist.

Eine struct (kann) hat also folglich auch operatoren, Funktionen, Konstruktor, Destruktor usw.!

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;
}
usw sollte auch gehen Smile

Zuletzt bearbeitet von Deviloper am 14.11.2007, 13:27, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 14.11.2007, 11:16    Titel: Antworten mit Zitat

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?? Question

mfg Faller
_________________
versuche alles nur wann und wie ist die frage
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 14.11.2007, 12:37    Titel: Antworten mit Zitat

Ja, siehe Devilopers Posting.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.11.2007, 13:20    Titel: Antworten mit Zitat

3, 2, 1: So langsam sollte cyby mehr Lösungen und Möglichkeiten für sein Problem haben, wie er benutzen kann Very Happy
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum