Klaasen über Schleife erstellen - Verständnisfrage



  • Oder wenns denn wirklich ein Array sein muss:

    classdemo d[10] = {classdemo(1,2,3),  classdemo(1,2,3), /*noch 8mal...*/};
    

    Und wenn du dann statt der C-Funktion printf, deren Syntax ja zuweilen etwas kryptisch anmutet, den stream cout benutzt (<iostream> hast du ja schon eingebunden), wirds noch etwas "mehr C++-ig" 🙂



  • Hallo,
    danke Euch für Eure Hilfe. 🙂

    pumuckl schrieb:

    Oder wenns denn wirklich ein Array sein muss:

    Ob es ein array sein muß oder nicht, weiss ich net so genau, ich kann Euch ja mal schildern was ich machen möchte. Ich öffnen eine Datei mit vielen Datensätzen.
    Aus jedem Datensatz benötige ich zwei Strings. Die Menge der Datensätze ist beim öffnen nicht bekannt. Darum die Idee mit der for-Schleife. Die Zahl 10 hätte ich später mit einer Variable ersetzt. Ich habe mich für eine Klasse entscheiden, weil ich später noch Funktionen in die Klasse einbauen kann, welche die beiden Strings sagen wir mal verwalten. 😃
    Die Idee mit einer eigenen Klasse war doch richtig, oder 😉 ? Oder ist der Ansatz komplett falsch???

    Grüße
    Tyrel



  • Mit Klassen bist du immer gut bedient, da du dann alle Prinzipien der OOP benutzen kannst (Kapselung, Zugriffsbeschränkungen etc.).

    Und wenn du beim Einlesen noch nicht weißt, um wieviele Datensätze es sich handelt, solltest du auf jeden Fall einen dynamischen Container (wie z.B. std::vector oder std::list) verwenden, da dieser sich selbständig bei Bedarf vergrößert.

    Wenn du nur zwei Strings aus den Daten benötigst, dann kannst du einfach
    entweder die Klasse std::pair benutzen oder aber eine eigene Struktur (bzw. Klasse) benutzen:

    struct SData
    {
      std::string s1, s2; // bzw. als Array s[2]
    };
    

    Die Klasse sollte dann die gesamten Daten inklusive Einlesen und Verarbeitung beinhalten:

    class Datas
    {
    public:
      Datas();
      ~Datas();
    
      bool Read();
    
    private:
      typedef std::vector<SData> VecDatas;
    
      VecDatas vecDatas;
    };
    

    Nun kannst du bei Bedarf weitere Methoden der Klasse hinzufügen (zum Auslesen der Daten oder zur Berechnung ...)



  • Super Danke. Ich gebe zu ich hab's noch nicht wirklich verstanden, aber ich werde mit den Stichpunkten welche Ihr mir gegeben habt, in meiner Literatur zum Thema stöbern. 🙂

    Eine Verständnisfrage hätte ich noch. 😉

    Aber ich kann schon eine Klasse (wie ich sie definiert habe) mittels einer for-Schleife so oft wie möglich/nötig erstellen, oder? Und nachher die einzelnen Klassenkopien mittels des Index [i] ansprechen. Quasi wie in einem Array. Oder führt das unter Umstanden zu Problemen? Die ganzen Beispiele welche ich gesehen haben gehen halt nur von 2 oder 3 Klassendefinitionen aus und nicht von unendlich vielen, wie ich es im Prinzip vorhabe.

    Danke+Grüße
    tyrel 😃



  • das geht schon, bis der speicher platzt



  • crashterpiece schrieb:

    das geht schon, bis der speicher platzt

    😃 😃 😃 dann lasse ich den Konstruktor einfach weg 😉

    Danke an alle für Eure Hilfe.
    tyrel



  • bringt nix, die Variablen a, b und c werden trotzdem angelegt

    Entsprechend sieht der Speicherbedarf der Klasse pro Instanz aus



  • wenn du die klassen über seinen std:vector verwaltest, kannst du zig tausende Instanzen deiner Klasse da rein packen... oder wieveil Datensätze hast ?



  • ja und 3 mal 4 byte, sind 12 Byte pro Instanz plus Overhead!

    d.h. du kannst 80000 Instanzen anlegen und hast 1MB ARbeitspeicher verbaucht;)



  • es handelt sich um einen shoutcast-player, welche ich programmieren will. (allerdings nicht für ein x86-System sondern für meinen SAT-Reciver)
    Und je nach Gerne und Menge der I-Net-Radios welchem dem Gerne entspricht, können das etwa schonmal 500 Datensätze sein. Ich hatte das ganze schonmal gecoded, allerdings mit einer verketteten Liste. Dies hat sich aber als nicht praktikabel im täglichen Einsatz herausgestellt. Weil ich C und C++ Code gemischt habe, was so wie ich finde schlechter Stil ist. Ich möchte jetzt das ganze auf eine andere Ebene bringen. Natürlich auch um C++ besser zu verstehen und zu lernen.
    Es ergeben sich aus einem XML-Eintrag in der Datei einen String für den Namen und einen String für die URL. Diese beiden Einträge müssen verwaltet werden.

    Die Idee war, wenn ich eine Klasse nehme, dann könnte ich gleich die Routine zum download der playlist von shoutcast direkt in die Klasse einbauen. Das ganze wäre dann übersichtlicher und objektorientierter. Wenn sich jemand das ganze mal anschauen will, ich habe es im dreambox beginner forum veröffentlicht.
    hier der link: http://www.dreambox.info/showthread.php?t=215909

    so nun wisst Ihr auch den Hintergrund des gesamten Projekts 😉


Anmelden zum Antworten