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
|
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: 37 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: 36 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: 40 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:
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
Zuletzt bearbeitet von Deviloper am 14.11.2007, 13:27, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
Faller Junior JLI'ler
Alter: 36 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: 37 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 |
|
|
|