// Time-stamp: "(13.05.02 22:39) SucheStudenten.cpp [Klaus@Wachtler.de]" /* 1 */ // /* 2 */ // Demonstriert eine Containerklasse in C++ (realisiert als template) /* 3 */ /* 4 */ #include <iostream> /* 5 */ #include <string> /* 6 */ /* 7 */ using namespace std; /* 8 */ /* 9 */ // Klasse der einzelnen Elemente: /* 10 */ class Student /* 11 */ { /* 12 */ public: /* 13 */ /* 14 */ // Konstruktor /* 15 */ Student( string v = "", string n = "", int m = -1 ) /* 16 */ : Vorname(v ), /* 17 */ Nachname( n ), /* 18 */ Matrikelnummer( m ) /* 19 */ { /* 20 */ } /* 21 */ /* 22 */ // copy-Konstruktor /* 23 */ Student( const Student &rechteSeite ) /* 24 */ : Vorname( rechteSeite.Vorname ), /* 25 */ Nachname( rechteSeite.Nachname ), /* 26 */ Matrikelnummer( rechteSeite.Matrikelnummer ) /* 27 */ { /* 28 */ } /* 29 */ /* 30 */ // Destruktor /* 31 */ virtual ~Student() /* 32 */ { /* 33 */ } /* 34 */ /* 35 */ // Zuweisung Student = Student /* 36 */ Student & operator=( const Student &rechteSeite ) /* 37 */ { /* 38 */ Vorname = rechteSeite.Vorname; /* 39 */ Nachname = rechteSeite.Nachname; /* 40 */ Matrikelnummer = rechteSeite.Matrikelnummer; /* 41 */ /* 42 */ return *this; /* 43 */ } /* 44 */ /* 45 */ // Ausgabe auf einen ostream /* 46 */ virtual void streamout( ostream & s ) const /* 47 */ { /* 48 */ s << Vorname; /* 49 */ s << ","; /* 50 */ s << Nachname; /* 51 */ s << ","; /* 52 */ s << Matrikelnummer; /* 53 */ } /* 54 */ /* 55 */ // Kopie von sich selbst allokieren /* 56 */ virtual Student &clone() const /* 57 */ { /* 58 */ return *(new Student(*this)); /* 59 */ } /* 60 */ /* 61 */ bool operator==( const Student &rS ) const /* 62 */ { /* 63 */ return Matrikelnummer==rS.Matrikelnummer; /* 64 */ } /* 65 */ /* 66 */ protected: /* 67 */ /* 68 */ /* 69 */ private: /* 70 */ /* 71 */ // Nutzdaten: /* 72 */ string Vorname; /* 73 */ string Nachname; /* 74 */ int Matrikelnummer; /* 75 */ /* 76 */ /* 77 */ }; // class Student... /* 78 */ /* 79 */ // ggf. nach Student.cpp kopieren: /* 80 */ ostream &operator<<( ostream &s, const Student &obj ) /* 81 */ { /* 82 */ obj.streamout( s ); /* 83 */ return s; /* 84 */ } /* 85 */ /* 86 */ /* 87 */ template <class T> class Feld /* 88 */ { /* 89 */ public: /* 90 */ /* 91 */ // Konstruktor /* 92 */ Feld( int n = 0 ) /* 93 */ : Nutzdaten( NULL ), /* 94 */ Anzahl( n ) /* 95 */ { /* 96 */ if( n>0 ) /* 97 */ { /* 98 */ Nutzdaten = new T[n]; /* 99 */ } /* 100 */ } /* 101 */ /* 102 */ // Destruktor /* 103 */ virtual ~Feld() /* 104 */ { /* 105 */ delete[] Nutzdaten; /* 106 */ } /* 107 */ /* 108 */ void setzeElement( int index, const T &t ) /* 109 */ { /* 110 */ Nutzdaten[index] = t; /* 111 */ } /* 112 */ /* 113 */ const T&sucheLinear( const T&key ) const /* 114 */ { /* 115 */ for( int i=0; i<Anzahl; i++ ) /* 116 */ { /* 117 */ if( key==Nutzdaten[i] ) /* 118 */ { /* 119 */ return Nutzdaten[i]; /* 120 */ } /* 121 */ } /* 122 */ throw "nix gefunden!"; /* 123 */ } /* 124 */ /* 125 */ private: /* 126 */ /* 127 */ // Nutzdaten /* 128 */ T *Nutzdaten; /* 129 */ /* 130 */ // Anzahl der Elemente: /* 131 */ int Anzahl; /* 132 */ /* 133 */ /* 134 */ }; // class Feld... /* 135 */ /* 136 */ /* 137 */ /* 138 */ int main( int nargs, char **args ) /* 139 */ { /* 140 */ try /* 141 */ { /* 142 */ Feld<Student> f( 5 ); /* 143 */ f.setzeElement( 0, Student( "Kurt", "Pappnase", 978123 ) ); /* 144 */ f.setzeElement( 1, Student( "Hein", "Meier", 987456 ) ); /* 145 */ f.setzeElement( 2, Student( "Fritz", "Schmidt", 998159 ) ); /* 146 */ f.setzeElement( 3, Student( "Klaus", "Lahm", 988123 ) ); /* 147 */ f.setzeElement( 4, Student( "Sina", "Flink", 977111 ) ); /* 148 */ /* 149 */ cout << " gefunden: " /* 150 */ << f.sucheLinear( Student( "", "", 988123 ) ) /* 151 */ << endl; /* 152 */ } /* 153 */ catch( const char *Fehler ) /* 154 */ { /* 155 */ cerr << Fehler << "\n"; /* 156 */ } /* 157 */ catch( ... ) /* 158 */ { /* 159 */ cerr << "???\n"; /* 160 */ } /* 161 */ /* 162 */ /* 163 */ return 0; /* 164 */ } // main( int nargs, char **args ) /* 165 */