Eindimensionale Arrays in Klasse erstellen
-
Hallo,
Ich bin neu hier, heiße Johannes und bin relativ frisch auf dem Gebiet der Objektorientierten Programmierung.
Ich versuche mich gerade in das Thema Klassen einzuarbeiten und komm jetzt irgendwie gerade nicht mehr weiter.
Ich hoffe, dass das Thema hier hin passt.
Es geht um folgendes:Ich nutze root von cern und möchte mein Programm zur Datenauswertung, welches zur Zeit in Form eines Skriptes besteht, auf die Objektorientierte Programmierung hin umschrieben.
Ich möchte eine Klasse erstellen in welcher ich meine Offsetwerte für Verstärkung und Kanal, sowie einige andere Werte ablegen kann.
Hierfür hab ich ein kleines Textfile, in welchem diese Werte eingetragen werden können und dann ausgelesen werden sollen.bisher habe ich die Klasse angelegt:
#ifndef Configuration_h #define Configuration_h #include <TROOT.h> #include <TChain.h> #include <TFile.h> class Configuration { private: Int_t Integer_Value; Float_t Float_Value; public: Configuration(); ~Configuration(); void Set_Integer(Int_t vi); void Set_Float(Float_t vf); Int_t Get_Integer(void); Float_t Get_Float(void); }; #endif#include "Configuration.h" Configuration::Configuration(Int_t n) { Int_t } Configuration::~Configuration(){} void Configuration::Set_Integer(Int_t vi) { Integer_Value=vi; } void Configuration::Set_Float(Float_t vf) { Float_Value=vf; } Int_t Configuration::Get_Integer() { return Integer_Value; } Float_t Configuration::Get_Float(void) { return Float_Value; }So das ganze funktioniert wenn ich:
Configuration *s=new Configuration; s->Set_Integer(5); s->Get_Integer(); Antwort: (Int_t) 5ausführen lasse.
Allerding hätte ich es gerne, dass ich vorher beiConfiguration *s=new Configuration(3); s->Set_Integer(5,0); s->Set_Integer(3,1); s->Set_Integer(7,2); . . .Eingeben könnte, die variable s also mehr als einen Wert hat, auf den ich über Set und Get zugreifen kann.
Nur hab ich leider nach vielem hin und her lesen und ausprobieren keine Ahnung wie ich das bewerkstelligen kann.Ich hoffe, das mir jemand helfen kann.
Viele Grüße
Jo
-
Benutze std::vector<> (bzw. std::array<>) dafür:
std::vector<Configuration> configs; configs.push_back(Configuration(5)); configs.push_back(Configuration(3)); configs.push_back(Configuration(7)); for(size_t n=0; n<configs.size(); ++n) std::cout << configs[n].GetInteger() << std::endl;Lies dich mal in diese Klassen der STL (Standard Template Library) ein. Hier schonmal die Referenz darauf: http://www.cplusplus.com/reference/stl/vector/
-
Den Sinn von new, Konstruktoren und Destruktoren hast du anscheinend auch nicht verstanden.
Und eine Klasse mit nur Datenelementen und Gettern und Settern für alle macht in der Regel auch nicht viel Sinn. Objektorientierung bedeutet nicht einfach nur das Schlüsselwort class zu benutzen, das ist eine ganz andere Denkweise als dein vorheriger Code.
-
Hallo,
erst mal vielen Dank für eure Antworten.
Ich hab das Problem gelöst und es funktioniert soweit.@SeppJ:
Ich habe die Klasse so angelegt,wie ich es aus den Tutorials, die ich gefunden habe, entnehmen konnte. Was du mit: "eine Klasse mit nur Datenelementen und Gettern und Settern für alle macht in der Regel auch nicht viel Sinn. Objektorientierung bedeutet nicht einfach nur das Schlüsselwort class zu benutzen, das ist eine ganz andere Denkweise als dein vorheriger Code." meinst verstehe ich leider auch nicht ganz.
Kannst du mir dahingehend vielleicht noch einen Wink in die richtige Richtung geben?Viele Grüße
Jo
-
Er meint, dass deine Klasse lediglich zwei Variablen beherbegt die man Setzen und Lesen kann. Den gleichen Zweck würde auch eine einfache Struktur erfüllen, die beide Variablen als Public deklariert, ohne jegliche Funktionen.
Er ist sicherlich verwirrt, weil du explizit "objekt-orientierung" im Eingangspost erwähnt hast
Lass dich nicht verwirren. Objekt-Orientierung fällt nicht mal so eben vom Himmel, aber es ist schonmal gut, dass du dich mit Klassen beschäftigst den das ist ja der erste Schritt, auch wenn dein Anwendungsfall nicht unbedingt eine solche erfordert.