Hallo erstmal,
ich habe folgendes Problem,
beim Listing 7.14, wurde eine klasse CRaumschiff erstellt welche als Basisklasse dienen soll, des weiteren wurde eine weiterer Klasse CMinenleger erstellt,
die jetzt alles von CRaumschiff erbt.
im main() wird dann eine instanz erzeugt und zwar folgendermaßen
CRaumschiff *Schiff;
Schiff = new CMinenleger;
später wird dann darauf hingewiesen das ich mit dieser Instanz nicht auf die Memberfunktions von CMinenleger zugreifen kann, ausser wenn ich in der Basisklasse Funktionen mit virtual kennzeichne und diese in der Abgeleiteten Klasse ersetze???!
Meine Frage lautet nun wie ich es hinbekomme, dass das funktioniert, dass ich also auf diese Funktionen zugreifen kann...
Im Buch wird ja drauf hingewiesen das es irgendwie Funktioniert
Hier nochmal zur Sicherheit das gesamte Listing...
|
C-/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
72
73
74
75
76
77
78
79
80
81
82
83
|
// C++ f�r Spieleprogrammierer
// Listing 7.14
// Virtuelle Funktionen
//
#include <iostream>
using namespace std;
// Klassen
//
// Basisklasse
//
class CRaumschiff
{
protected:
// Membervariablen
int m_Farbe;
int m_Energie;
public:
// Memberfunktionen
CRaumschiff ()
{
m_Farbe = 0;
m_Energie = 1000;
cout << "Neues Raumschiff erstellt" << endl;
}
virtual ~CRaumschiff () {cout << "Destruktor Basisklasse\n";}
virtual void Starten () {cout << "Raumschiff startet!\n";}
virtual void Landen () {cout << "Raumschiff landet!\n";}
};
// Abgeleitete Klasse f�r den Minenleger
//
class CMinenleger : public CRaumschiff
{
private:
// Membervariablen
int m_Minen;
public:
// Memberfunktionen
CMinenleger ()
{
m_Minen = 10;
cout << "Neuer Minenleger erstellt" << endl;
};
~CMinenleger () {cout << "Destruktor Minenleger\n";}
void Starten () {cout << "Minenleger startet!\n";}
void Landen () {cout << "Minenleger landet!\n";}
void Minen_Legen() {Minen--;} //von mir hinzugefügt
};
// Hauptprogramm
//
int main ()
{
// Variablen
//
CRaumschiff *Schiff; // Ein Raumschiff
Schiff = new CMinenleger; // Ein Minenleger soll es sein
// Minenleger f�hrt einige Aktionen aus
Schiff->Starten ();
Schiff->Landen ();
Schiff->Minen_Legen(); //compilerfehler
delete Schiff; // Raumschiff zerst�ren
return 0;
}
|