Vererbung



  • Hallo,

    ich bin noch ein ziemlicher C++ Neuling und hab zu folgendem Code eine Frage. Bis hierhin hab ich das Programm soweit selbst geschrieben. Nun soll die Klasse GelochtePlatte laut Aufgabenstellung um das private Attribut loch vom Typ MetallPlatte** (zur Speicherrung der Informationen über die herausgestanzten Teile, also der Löcher der Platte. Dem Attribut loch wird vom Konstruktor ein Zeiger auf ein Feld von Zeigern auf MetallPlatte-Objekte zugewiesen.) ergänzt werden.

    Konstruktor: Er erzeugt ein Feld das n Zeiger auf MetallPlatte-Objekte aufnehmen kann, und weist dem Attribut loch einen Zeiger auf dieses Feld zu.

    Kann mir einer verraten was ** beim Attribut MetallPlatte zu bedeuten hat und wie ich die Forderungen so umsetzen kann das sie auch einen Sinn ergeben?

    #include <iostream>
    using namespace std;
    
    class MetallPlatte
    {
        private:
            double laenge, breite;
    
        public:
            MetallPlatte (double laenge, double breite)
            {
                this->laenge = laenge;
                this->breite = breite;
            }
    
            double getLaenge() const
            {
                   return laenge;
            }
    
            double getBreite() const
            {
                   return breite;
            }
    
            double flaeche()
            {
                   return laenge * breite;
            }
    
            bool istSchwererAls(MetallPlatte mp)
            {
                   return flaeche() > mp.flaeche();
            }    
    };
    
    class GelochtePlatte : public MetallPlatte
    {
        private:
            int anzahlLoecher;
            int maxAnzahlLoecher;
            double lochLaenge;
            double lochBreite;
    
        public:  
            GelochtePlatte(double laengePlatte, double breitePlatte, int maxAnzahlLoecher): 
            MetallPlatte(laengePlatte, breitePlatte)
            {
                anzahlLoecher = 0;
                this->maxAnzahlLoecher = maxAnzahlLoecher;
                lochBreite = 1/(2*maxAnzahlLoecher) * MetallPlatte::getBreite();
                lochLaenge = 1/(2*maxAnzahlLoecher) * MetallPlatte::getLaenge();
            } 
    };
    
    int main()
    {
        MetallPlatte mp(20,10);
        //GelochtePlatte gp = lochen(mp, 10, 3);
    
        cout << "mp.flaeche() = " << mp.flaeche() << endl;
        //cout << "gp.flaeche() = " << gp.flaeche() << endl;
    
        /*if(gp.istSchwererAls(mp))
            cout << "gp ist schwerer als mp." << endl;
        else if(mp.istSchwererAls(gp))
            cout << "mp ist schwerer als gp." << endl;
        else
            cout << "mp und gp sind gleich schwer." << endl;*/
    
        char dummy;
        cin >> dummy;    
        return 0;
    }
    


  • btw. dein problem schein nix mit vererbung zu tun zu haben

    MetallPlatte** loch = new MetallPlatte* [20];
    

    jetzt hast du ein array mit 20 Metallplattenzeigern
    jeder Zeiger kann eine Instanz der Klasse Metallplatte aufnehmen
    momentan stehen aber noch keine Metallplatten drin deswegen solltest du die Zeiger
    aus NULL setzen

    for ( int i = 0; i < 20; i++ )
    {
      loch [i] = NULL;
    }
    

    so jetzt könntest du neue Metallplatten Instanzen in den Array einfügen
    z.b.

    loch [5] = new MetallPlatte;
    

    funktionen aufrufen

    loch [5]->MachWas();
    

    und löschen

    delete loch [5];
    loch [5] = NULL;
    

    ganz zum schluss musst du natürlich auch dein zeigerarray wieder löschen

    delete [] loch;
    loch = NULL;
    

Anmelden zum Antworten