Klassen und Arrays



  • Hallo,

    da mein Anliegen recht klein und wahrscheinlich kleinlich ist, fasse ich mich auch kurz :).

    Ich möchte mehrere Klassenobjekte als Array zusammen fassen, also bspw.

    Geheime_Klasse foobar [100];
    

    schreiben, was verständlicherweise nicht geht, da der Operator [] ja nicht überladen ist. Nun beschäftigt mich die Frage, wie es denn nun möglich ist, soetwas ähnlich darzustellen. Ich habe nämlich keine Lust 100 Variablen mit verschiedenen Namen zu erstellen und jede einzeln ohne eine for-Schleife anzusprechen :).

    Ich hoffe, dass man Problem verständlich geschildert ist und mir daher geholfen wird.

    MfG pLuSmaN



  • nimm einen stl container z.b. vector
    mfg



  • Ähh, warum soll das nicht gehen?

    class a_class
    {
    public:
    	void blubb(){cout << "Hallo";}
    };
    
    int main()
    {
    	a_class blubb[100];
    	blubb[0].blubb();
    
    	return 0;
    }
    

    Funktioniert wunderbar... Steh' ich grad' aufm Schlauch? 😕



  • plusman:

    Es ist schon möglich. Wer hat dir denn die Flausen in den kopf gesetzt das es nicht geht ?

    so wie du das da gemacht hast ist das ein Array mit 100 Elementen vom Typ Geheime_Klasse

    foobar[33].eine_methode_aus_der_klasse_Geheime_Klasse("Du bist ein Element eines Klassen Arrays");
    

    MfG



  • Hm... Dann scheine ich wohl etwas falsch gemacht zu haben 😕
    Also als das vor kurzem in einem meiner Source-Codes versucht habe, beschwerte sich der Compiler, dass der Operator [] nicht überladen sei.

    Naja, dann muss ich mir das wohl nochmal genauer anschauen 🙂

    Danke für die Hilfe.

    MfG pLuSmaN



  • wolltest du sowas machen?

    class Test
    {
        private:
                int array[100];
        public:
               //hier deine methoden...
    };
    
    int main()
    {
        Test test;
        for(int i = 0; i < 100; i++)  
            test[i] = 3*i;    //geht natürlich nicht... hierfür muss man den []operator überladen
    }
    


  • verwende:

    list: bei großen objekten, bzw großen komplexen klassen
    vector: bei kleineren objekten mit bestimmten Zugriff
    o deque: wenn du Wert darauf legst das erste/letzte Element haeufig zu loeschen



  • leo aka qsch schrieb:

    verwende:
    list: bei großen objekten, bzw großen komplexen klassen
    vector: bei kleineren objekten mit bestimmten Zugriff

    😮 was ratest du denn da?



  • ssm schrieb:

    leo aka qsch schrieb:

    verwende:
    list: bei großen objekten, bzw großen komplexen klassen
    vector: bei kleineren objekten mit bestimmten Zugriff

    😮 was ratest du denn da?

    warum? es geht doch, man kann doch machen, was man will...

    aber @leo aka qsch:
    man kann doch auch zeiger auf komplexe klassen speichern und diese dann einfach in einen vektor packen... dann ist der zeiger auf die klasse nur nur 4 groß, da der zeiger ja nur eine adresse im speicher enthält...

    man sollte eine liste benutzen, wenn man oft objekte, die man gespeichert hat löscht oder einfügt ⚠, da man bei einer liste nur zeiger "verbiegen" muss... bei einem vektor müssen elemente verschoben werden, wenn man elemente am anfang des vektors löscht....

    vondaher finde ich nicht, dass man eine liste nur bei komplexen klassen/strukturen verwenden sollte... man muss sich überlegen, wie oft man bestimmte elemente löscht oder einfügt!



  • leech schrieb:

    ssm schrieb:

    leo aka qsch schrieb:

    verwende:
    list: bei großen objekten, bzw großen komplexen klassen
    vector: bei kleineren objekten mit bestimmten Zugriff

    😮 was ratest du denn da?

    warum? es geht doch, man kann doch machen, was man will...

    aber @leo aka qsch:
    man kann doch auch zeiger auf komplexe klassen speichern und diese dann einfach in einen vektor packen... dann ist der zeiger auf die klasse nur nur 4 groß, da der zeiger ja nur eine adresse im speicher enthält...

    warum zeiger auf komplexe klassen in einen vector speichern wenn es dafuer einen eigenen container gibt der dies besser unterstuezt

    leech schrieb:

    man sollte eine liste benutzen, wenn man oft objekte, die man gespeichert hat löscht oder einfügt ⚠, da man bei einer liste nur zeiger "verbiegen" muss... bei einem vektor müssen elemente verschoben werden, wenn man elemente am anfang des vektors löscht....

    das hab ich oben vergessen zu sagen das er bei beliebigen loeschen von elementen aus den cointainer (also nicht anfang/ende) list benutzen soll



  • leo aka qsch schrieb:

    verwende:

    list: bei großen objekten, bzw großen komplexen klassen
    vector: bei kleineren objekten mit bestimmten Zugriff

    Speichermanagement ist bei der Benutzung von Containern nur sekundär. Welchen Container du brauchst, hängt primär vom Verwendungszweck ab. Du kannst deshalb vector genauso gut für grosse Objekte verwenden.
    Wenn's darum geht, häufig und schnell Elemente einzufügen und zu löschen, dann ist eine Liste sicherlich eine gute Wahl. Wenn's um schnellen random access geht, dann ist eine Klasse wie vector eher hilfreich.



  • leo aka qsch schrieb:

    leech schrieb:

    ssm schrieb:

    leo aka qsch schrieb:

    verwende:
    list: bei großen objekten, bzw großen komplexen klassen
    vector: bei kleineren objekten mit bestimmten Zugriff

    😮 was ratest du denn da?

    warum? es geht doch, man kann doch machen, was man will...

    aber @leo aka qsch:
    man kann doch auch zeiger auf komplexe klassen speichern und diese dann einfach in einen vektor packen... dann ist der zeiger auf die klasse nur nur 4 groß, da der zeiger ja nur eine adresse im speicher enthält...

    warum zeiger auf komplexe klassen in einen vector speichern wenn es dafuer einen eigenen container gibt der dies besser unterstuezt

    😕 Ich Weiß zwar nicht, was du damit sagen willst, aber die anderen haben schon recht, das hängt vom Verwendungszweck ab.

    leo aka qsch schrieb:

    leech schrieb:

    man sollte eine liste benutzen, wenn man oft objekte, die man gespeichert hat löscht oder einfügt ⚠, da man bei einer liste nur zeiger "verbiegen" muss... bei einem vektor müssen elemente verschoben werden, wenn man elemente am anfang des vektors löscht....

    das hab ich oben vergessen zu sagen das er bei beliebigen loeschen von elementen aus den cointainer (also nicht anfang/ende) list benutzen soll

    Und gerade da (unterstrichen) würde ich nicht ⚠ Vector nehmen ... Du weisst schon, das man dann das ganze Array einmal kopieren muss 😮
    (Ausser die STL ist intelligent :D)


Log in to reply