Was zurückgeben?
-
Hallo,
folgende Situation:
Ich habe zwei Klassen. Klasse A und Klasse B. Klasse A enthält einen Vektor von Klasse B. Dieser Vektor ist im Privatbereich der Funktion. Will der User auf den Vektor zugreifen, soll dies über eine Methode geschehen.
Da der User eine ID eingeben soll, muss ich diese natürlich auf Gültigkeit überprüfen. Daraus entsteht also folgendes:#include <iostream> #include <vector> using namespace std; class B { private: int zahl; public: B() { zahl=0;} ~B() {} void set( int z ) { this->zahl = z; } int get() { return this->zahl;} }; class A { private: std::vector< B > elems; public: A() {} ~A() { elems.clear(); } B get( int id ) { //prüfen, ob die ID existiert if( id >= 0 && id < (int)this->elems.size() ) { return (*this).elems[id]; } else { //return ????; } } }; int main() { A bsp; //Das folgende sollte nicht funktionieren, da es ja noch keine elemente gibt. bsp.get( 0 ).set( 15 ); cout << bsp.get( 0 ).get() << endl; //Ausgabe der Konsole: 15 cin.get(); return 0; }Nur was soll ich in A::get() zurückgeben, wenn das Element nicht existiert?
Wenn ich nicht die Überprüfung vorher mache, dann stürzt das Programm logischerweise ab.
Habt ihr da eine Idee?Mfg. Christoph Ludwig
-
Mach es doch genauso wie vector::at, das die gleiche Funktionalität bietet. Oder noch besser: Verwende vector::at, indem du einfach direkt elems.at(id) zurückgibst.
-
Du könntest alleine schon bei der Funktion Signatur eine falsche Eingabe verhindern, indem du kein
intm sondernunsigned intals Typ erwartest. Und wenn dann jemand meint er müsse da etwas grösseres, als überhaupt möglich abfragen, dann schmeiss halt ne exception. (oder, wie schon gesagt biete beides an. Eine Funktion, die halt crasht und die andere, die eine exception wirft).