ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
217
217
EMPFEHLEN
-
Hallo zusammen.
Ich bräuchte eure Hilfe, da ich irgendwie aufn Schlauch stehe.
Und zwar geht’s um Vererbung und das typische
....................-----> PKW
Fahrzeug -|
....................-----> LKW
Beispiel.
Dazu habe ich folgende Klassen:
class Fahrzeug
Code :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
#define MAXZEICHEN 25 #include <iostream> using namespace std; class Fahrzeug { protected: char name[MAXZEICHEN]; public: // Konstruktor Fahrzeug(const char* neuer_name) { sprintf_s(name, MAXZEICHEN, neuer_name); }; // Destruktor //~Medium() { }; // Ein/Ausgabe virtual void ausgabe() = 0; //virtual void anzSitzplaetze(int neue_sitzplaetze) = 0; virtual void neuerName(const char* neuer_name) = 0; };
class PKW
Code :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
#include <iostream> using namespace std; class PKW : public Fahrzeug { private: int sitzplaetze; public: // Konstruktor PKW(const char* neuer_name, int neue_sitzplaetze) : Fahrzeug(const char* neuer_name) { sitzplaetze = neue_sitzplaetze; }; // Destruktor //~PKW(); // Ein/Ausgabe void ausgabe() { cout<<"PKW:"<<endl; cout<<"Name: "<<name<<endl; cout<<"Sitze: "<<sitzplaetze<<endl; }; void anzSitzplaetze(int neue_sitzplaetze) { sitzplaetze = neue_sitzplaetze; }; void neuerName(const char* neuer_name); { sprintf_s(name, MAXZEICHEN, neuer_name); }; };
class LKW
Code :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
#include <iostream> using namespace std; class LKW : public Fahrzeug { private: public: // Konstruktor LKW(const char* neuer_name) : Fahrzeug(const char* neuer_name) {}; // Destruktor //~LKW(); // Ein/Ausgabe void ausgabe() { cout<<"LKW:"<<endl; cout<<"Name: "<<name<<endl; }; void neuerName(const char* neuer_name); { sprintf_s(name, MAXZEICHEN, neuer_name); }; };
meine Main wo ich versuche von einer Klasse in die andere zu wandeln
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Fahzeug* fz[3]; PKW* pkw1; LKW* lkw1; fz[0] = new pkw1("Fiat", 5); fz[1] = new lkw1("MAN"); cout<<"Dynamic-Cast Anwenden"<<endl; pkw1 = dynamic_cast<PKW*>(fz[0]); // OK pkw1->ausgabe(); cout<<endl<<endl; fz[2] = dynamic_cast<Fahzeug*>(fz[0]); // OK fz[2]->ausgabe(); cout<<endl<<endl; lkw1 = dynamic_cast<LKW*>(fz[0]); // Geht nicht lkw1->ausgabe(); cout<<endl<<endl;
Mein Problem besteht darin, das ich es nicht schaffe aus einen PKW ein LKW zu machen (da er wie ich denke den Speicher für die Sitzplätze nicht reserviert hat).
Ich bin da ein wenig verwirrt.
Ich habe ja nur Daten vom Typ Fahrzeug… was mich zu einer weiteren Frage bringt.
Wie komme ich an die Funktion „void anzSitzplaetze(int neue_sitzplaetze)“ wenn ich doch ein Fahrzeug habe?
Des Weitereren: brauche ich die Destruktoren?
Das sind gleich 3 Wünsche auf einmal, also sag ich schon mal:
Vielen Dank für die Mühe sich das überhaupt an zu schauen
MFG MarcoGeändert von MRS (18.03.10 um 16:01 Uhr)
Ich kann zwar nicht alles, aber alles probieren!
-
18.03.10 16:25 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Das geht so nicht. Warum probierst du denn den Code nicht aus bevor du ihn postest?
Funktioniert natürlich, aber ist relativ sinnlos. Die Typen von fz[2] und fz[0] sind identisch. Kein Cast notwendig.Code cpp:1 2
fz[0] = new PKW("Fiat", 5); fz[1] = new LKW("MAN");
Natürlich geht das nicht. fz[0] ist ein PKW und kein LKW.
Nur weil ein Elefant ein Tier ist und ein Rabe auch ein Tier, kann ein Elefant trotzdem keine Eier legen.
Das hättest du nicht dazusagen müssen....
Warum hast du denn die rein virtuelle anSitzplaetze Methode in der Fahrzeug Klasse auskommentiert?
Ansonsten natürlich über einen Downcast mit dynamic_cast:
Nein.Code cpp:1 2 3 4
PKW* pkw = dynamic_cast<PKW*>(fz[0]); if (pkw != 0) { pkw->anzSitzplaetze(...); }
GrußGeändert von deepthroat (18.03.10 um 16:29 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hallo deepthroat.
Danke erst mal für die schnelle Antwort und Entschuldigung für den Fehler im Code. Ich hatte noch die ganze Zeit was probiert und nicht mehr kompiliert am Ende.
Hmmm… Dann dient der dynamic_cast nur zur Zurückumwandlung. Ach und ich sehe gerade das er NULL wird bei einem Fehlcast.
Da muss ich nochmal ran. Danke nochmals.
Die Aufgabe ist noch ein wenig größer und da werden mit Sicherheit noch ein zwei Fragen auftauchen. Daher schließe ich das Thema mal noch nicht.
MFG MarcoIch kann zwar nicht alles, aber alles probieren!
Ähnliche Themen
-
Sender casten ?
Von w_digger im Forum .NET Windows FormsAntworten: 10Letzter Beitrag: 11.07.08, 12:59 -
Casten
Von JohnathanBernstein im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 2Letzter Beitrag: 14.08.07, 13:28 -
Casten in PHP
Von baccula im Forum PHPAntworten: 0Letzter Beitrag: 12.02.06, 14:15 -
Typkonvertierung und Casten?
Von Math55 im Forum JavaAntworten: 1Letzter Beitrag: 26.07.05, 11:19 -
Typen casten in vb?
Von sra im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 08.10.04, 13:06





Zitieren

Login






