tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
217
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MRS MRS ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    24
    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 Marco
    Geändert von MRS (18.03.10 um 16:01 Uhr)
     
    Ich kann zwar nicht alles, aber alles probieren!

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von MRS Beitrag anzeigen
    meine Main wo ich versuche von einer Klasse in die andere zu wandeln
    Code :
    1
    2
    3
    4
    5
    6
    7
    
        Fahzeug* fz[3];
            
        PKW* pkw1;  
        LKW* lkw1;
     
        fz[0] = new pkw1("Fiat", 5);
        fz[1] = new lkw1("MAN");
    Das geht so nicht. Warum probierst du denn den Code nicht aus bevor du ihn postest?
    Code cpp:
    1
    2
    
    fz[0] = new PKW("Fiat", 5);
        fz[1] = new LKW("MAN");
    Zitat Zitat von MRS Beitrag anzeigen
    Code :
    1
    
        fz[2] = dynamic_cast<Fahzeug*>(fz[0]);  // OK
    Funktioniert natürlich, aber ist relativ sinnlos. Die Typen von fz[2] und fz[0] sind identisch. Kein Cast notwendig.

    Zitat Zitat von MRS Beitrag anzeigen
    Code :
    1
    2
    3
    4
    
            fz[2]->ausgabe();
        cout<<endl<<endl;
     
        lkw1 = dynamic_cast<LKW*>(fz[0]);   // Geht nicht
    Natürlich geht das nicht. fz[0] ist ein PKW und kein LKW.
    Zitat Zitat von MRS Beitrag anzeigen
    Mein Problem besteht darin, das ich es nicht schaffe aus einen PKW ein LKW zu machen.
    Nur weil ein Elefant ein Tier ist und ein Rabe auch ein Tier, kann ein Elefant trotzdem keine Eier legen.
    Zitat Zitat von MRS Beitrag anzeigen
    Ich bin da ein wenig verwirrt.
    Das hättest du nicht dazusagen müssen....
    Zitat Zitat von MRS Beitrag anzeigen
    Wie komme ich an die Funktion „void anzSitzplaetze(int neue_sitzplaetze)“ wenn ich doch ein Fahrzeug habe?
    Warum hast du denn die rein virtuelle anSitzplaetze Methode in der Fahrzeug Klasse auskommentiert?

    Ansonsten natürlich über einen Downcast mit dynamic_cast:
    Code cpp:
    1
    2
    3
    4
    
    PKW* pkw = dynamic_cast<PKW*>(fz[0]);
    if (pkw != 0) {
      pkw->anzSitzplaetze(...);
    }
    Zitat Zitat von MRS Beitrag anzeigen
    Des Weitereren: brauche ich die Destruktoren?
    Nein.

    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.

  3. #3
    MRS MRS ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    24
    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 Marco
     
    Ich kann zwar nicht alles, aber alles probieren!

Ähnliche Themen

  1. Sender casten ?
    Von w_digger im Forum .NET Windows Forms
    Antworten: 10
    Letzter Beitrag: 11.07.08, 12:59
  2. Casten
    Von JohnathanBernstein im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 2
    Letzter Beitrag: 14.08.07, 13:28
  3. Casten in PHP
    Von baccula im Forum PHP
    Antworten: 0
    Letzter Beitrag: 12.02.06, 14:15
  4. Typkonvertierung und Casten?
    Von Math55 im Forum Java
    Antworten: 1
    Letzter Beitrag: 26.07.05, 11:19
  5. Typen casten in vb?
    Von sra im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 08.10.04, 13:06