C++ Operator [] überladen
-
template<class T,std::size_t D> class Array { vector<T>* vec; public: // 1. einen Konstruktor Vector() besitzen, der den Inhalt mit Nullen initialisiert Array() { this->vec = new vector<T>(D,0); } public: // 2. den Index-Operator [] überladen, damit man auf die einzelnen Elemente des Vektors zugreifen kann. T& operator [] (std::size_t i) { return vec[i]; } public: // 2. den Index-Operator [] überladen, damit man auf die einzelnen Elemente des Vektors zugreifen kann. const T& operator [] (std::size_t i) const { return vec[i]; } public: // 3. den Additionsoperator + überladen, so dass man mit den entsprechenden Aufrufen Vektoren addieren kann. Array<T,D>& operator + (Array<T,D>& input) { Array<T,D> temp; for(long i = 0; i < D; i++) temp[i] = this[i] + input[i]; } public: // 5. eine Funktion length() besitzen, die einem die Länge des Vektors (euklidische Norm) zurückgibt. long length() { double l = 0.0; for(long i = 0; i < D; i++) l += pow(this[i],2); l = sqrt(l); return D; } public: // 6. eine Funktion print() besitzen, die den Inhalt des Vektors auf dem Bildschirm ausgibt. void print() { for(long i = 0; i < D; i++) cout<<"["<<*this[i]<<"]"; cout<<endl; } };Der vector vec soll direkt per []-Operator gelesen/beschrieben werden können. Wo ist mein Fehler?
Vielen Dank für Eure Hilfe.
-
Wozu der Pointer und der new Kram?
-
@Sone: Die const Referenz wird aber von der non-const Methode zu einer normalen Referenz gecasted, was unmöglich wäre wenn die const Methode einfache char zurückgibt.
-
Höchstwarscheinlich weil ich es nicht besser kann ;). Falls ich es direkt initialisieren kann nur her mit Lösungen =). Ich denke ich muss nicht bemerken das ich Anfänger bin...
-
pyhax schrieb:
@Sone: Die const Referenz wird aber von der non-const Methode zu einer normalen Referenz gecasted, was unmöglich wäre wenn die const Methode einfache char zurückgibt.
Ach Mist! Das hab ich völlig übersehen

-
template <typename T, std::size_t S> class Array { std::vector<T> v_; public: Array() : v_(S) // "Initialisierungsliste" {} };Kommst du von Java oder so? In C++ sind Pointer eher selten.
Edit: Von den anderen Methoden her macht ein std::vector im Übrigen wenig Sinn. Da wäre eher sowas angebracht:
template <typename T, std::size_t S> class Array { std::array<T, S> v_; };
-
cooky, meinst du nicht eher: Speicher selbst allokieren (und damit verwalten) ist in C++ eher unüblich?
P.S.: Ein Hinweis auf C++11 wäre angebracht, ist ja noch Anfänger... (wegen
std::array)
-
Also die Aufgabe soll einen n-dimensionalen Vektor simulieren. Array stammt noch aus einem eigenen Projekt daher einfach Array durch Vektor ersetzen. Mein Fehler.
-
Das war nicht der Punkt. Wenn man z.B. eine Vektorklasse für Spiele implementiert will man da nicht noch eine Dereferenzierung drin haben. Daher das std::array,
-
Das mag sein, trotzdem ist meine Aufgabenstellung so gegeben. Kann ich nix dran ändern.