Array und Zeiger auf vererbtes Objekt



  • Also ich habe ein Problem(wie so viele hier)

    Habe eine dummy Klasse die nichts weiter als virtuelle methoden besitzt(class dummy). dog ist davon abgeleitet und hat alle virtuellen methoden überschrieben.

    jetzt möchte ich ein Array von objekten an eine methode übergeben so das diese das array sortieren kann. Die Ordnung ist aber in der Abgeleiteten Klasse mit operator> bestimmt. bis jetzt mache ich es so:

    int main()
    {
    	Test Testklasse;
    	dummy *n[10];
    	for(int i=0;i<10;i++)
    		n[i]=new dog(i);
    	Testklasse.Funktion(n[0]);
    }
    void Test::Funktion(dummy *n)
    {
    	for(int i=0;i<5;i++)
    		(n+i)->speak();
    
    }
    

    funktioniert aber leider nicht :(. Mein Verdacht ist, dass das (n+i) die größe der Klasse dummy zum Zeiger addiert und nicht wie gewollt von dog. da alles unverändert ohne +i perfekt funktioniert. Es wird die überladene Funktion aufgerufen u.s.w..

    Danke für Hilfe!

    (



  • Wieso benutzt du keinen vector dafür? Wäre am einfachsten.

    Ansonsten:

    #include <iostream>
    
    class dummy {
    protected:
            int i;
    public:
      virtual void speak()=0;
    };
    
    class dog:public dummy {
    public:
      dog(int i) { this->i=i; }
      void speak() { std::cout << "speak" << i << std::endl; }
    };
    
    class Test {
    public:
            void Funktion(dummy **n) // Zeiger auf Zeiger auf dummy
            {
                    for(int i=0;i<5;i++)
                            n[i]->speak();
            }
    };
    
    int main()
    {
        Test Testklasse;
        dummy *n[10]; // Feld von 10 Zeigern auf dummy
        for(int i=0;i<10;++i)
            n[i]=new dog(i);
        Testklasse.Funktion(n);
        for(int i=0;i<10;++i)
            delete n[i];
    }
    

    dummy** ist ein Zeiger von Zeigern auf eine bestimmte Art von Objekt. Durch den []-operator, kannst du so nun auf ein Objekt zugreifen und es benutzen.

    Und immer schön den Speicher freigeben (bissl umständlich bei mir *g*).



  • Ja Speicher da hätte ich dran gedacht :D.(natürlich vergessen)

    Aber das mit dem Vektor habe ich noch nie gehabt oder habe die Vorlesung geschwänzt und sie hat es in den Folien nicht gehabt. DANKE!!!!!!!!!

    Aber hätte jetzt auch eine sehr dreckige Lösung gehabt! Habe herausgefunden das er statt 1 immer 4 addiert. So habe ich einfach die größe des Objekts durch 4 aufaddiert. Im Beispiel: (n+i*24) aber das wäre keine Lösung gewesen um sie jemandem zu zeigen.

    Bin dir echt dankbar für den Tipp!!!!!! Verstehe so auch endlich wie man vernünftig Arrays übergeben kann 🙂 Habe immer stundenlang versucht mich vor dem Problem zu drücken und so seeehr unverständlichen code fabriziert.

    DU bist ein HELD 😉

    Glaube das mich jetzt jeder für verrückt hält aber wenn man das nicht kennt ist es echt schwer mit arrays zu programmieren 😡

    nochmals danke

    ###################################################################
    ähm wie finde ich denn bei Vektoren die Länge heraus?



  • Auf die momentan enthaltene Anzahl Elemente kannst du mit size() zugreifen. capacity() liefert die Anzahl Elemente die der Vektor momentan aufnehmen kann, bevor er seinen Speicher vergrößert (braucht man denke ich eher seltener).

    Ähm...ja, danke für das Lob, aber so gut bin ich nicht, hoffe das ändert sich nach der Ausbildung im C++-Bereich.


Anmelden zum Antworten