Hallo Leute! Ich bin jetzt im Buch bei der Aufgabenstellung zu den Klassen.
In dieser soll eine Klasse erstellt werden, die ein paar Membervariablen besitzt. 2 Konstruktoren soll es geben. (Einen für das Spieler-Raumschiff und eines für den Gegner)
Ich soll auf dem Heap zwei Instanzen der Klasse reservieren und am Ende mit einem Destruktor (der eine Meldung ausgibt) den Speicher wieder freigeben.
Hier mein Code, der auch funktioniert. Hab nur den Gegner wieder rausgelöscht, aufgrund der Übersicht.
Meine Fragen kommen nach dem Code.
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include <iostream>
using namespace std;
class cRaumschiff
{
private:
int m_xPos, m_yPos;
int Energie;
int Speed;
public:
cRaumschiff();
cRaumschiff(int x, int y);
~cRaumschiff();
void ZeigeDaten();
};
int main()
{
int xPos = 0;
int yPos = 0;
cRaumschiff Spieler1;
cRaumschiff *pSpieler = new cRaumschiff;
Spieler1.ZeigeDaten();
delete pSpieler;
return 0;
}
/*//////////////////////////////// KONSTRUKTOR*/
cRaumschiff::cRaumschiff()
{
cout << "Konstruktor aufgerufen!" << endl;
int m_xPos = 0;
int m_yPos = 0;
int Energie = 1000;
int Speed = 0;
}
/*///////////////////////////////////// DESTRUKTOR*/
cRaumschiff::~cRaumschiff()
{
cout << "Destruktor wurde aufgerufen!" << endl;
}
/*//////////////////////////// DATEN ANZEIGEN*/
void cRaumschiff::ZeigeDaten()
{
cout << "Energie: " << Energie << endl;
cout << "Geschwind: " << Speed << endl;
cout << "x-Pos: " << m_xPos << endl;
cout << "y-Pos: " << m_yPos << endl;
}
|
Frage 1:
Wieso muss ich dem Zeiger keine Adresse zuweisen mit dem kaufmännischen &?
Ich dachte, ein Zeiger muss immer auf eine Adresse zeigen! (siehe
cRaumschiff *pSpieler = new cRaumschiff
Frage 2:
Wie man sieht, hab ich mir eine Instanz OHNE Speicherreservierung erstellt (cRaumschiff Spieler1
Dieser wird ja mit dem Standard-Konstruktor erstellt, welche die Variablen definiert.
Diese lasse ich mir einige Zeilen später mit "
Spieler1.ZeigeDaten();" anzeigen.
Wenn ich das Programm aber starte, zeigt er mir für jede Variable den Wert "-858993560".
Diese müssten doch aber die Werte 0 besitzen bzw. 1000 für die Energie! Was mache ich falsch?
Frage 3:
Wie kann ich die ZeigeDaten()-Funktion für Instanzen anzeigen lassen, die ich auf dem Heap reserviert habe?
*pSpieler.ZeigeDaten() sowieso pSpieler.ZeigeDaten() funktionieren nicht. Ich kann die Instanzen zwar erzeugen, aber mit deren Werten nicht weiterarbeiten? Was übersehe ich wieder?
---------------------------------------------------------------------------
Es tut mir leid, dass ich schon wieder ein Thema aufmache, weil ich nicht weiterkomme! Aber ich probiere wirklich viel selbstständig und frage erst, wenns wirklich gar nicht klappen will.
Ich hoffe, Ihr habt Verständnis und helft mir trotzdem!!
Liebe Grüße!