// studs.cc #include #include #include "studs.hh" // --------------------------------------------------------------------- Studenten :: Studenten() { cout << "Standard-konstruktor" << endl; matrikel = skz = 0; pname = new char[1]; pname[0] = '\0'; pvorname = new char[1]; pvorname[0] = '\0'; } // --------------------------------------------------------------------- Studenten :: Studenten(const char vorname[], const char name[], const long int mat_nr, const int skz_nr) { cout << "Parameter-konstruktor" << endl; matrikel = mat_nr; skz = skz_nr; pname = new char[strlen(name)+1]; strcpy(pname,name); pvorname = new char[strlen(vorname)+1]; strcpy(pvorname,vorname); } // --------------------------------------------------------------------- // Copy constructor will be applied only to uninitialized data // ===> no deallocation of memory necessary Studenten :: Studenten(const Studenten& orig) { cout << "Copy-konstruktor" << endl; matrikel = orig.matrikel; skz = orig.skz; pname = new char[strlen(orig.pname)+1]; strcpy(pname,orig.pname); pvorname = new char[strlen(orig.pvorname)+1]; strcpy(pvorname,orig.pvorname); } // --------------------------------------------------------------------- Studenten :: ~Studenten() { delete [] pvorname; delete [] pname; cout << "Destruktor " << endl; } // --------------------------------------------------------------------- // Assignment operator will be applied also to already initialized data // ===> deallocation of memory may be necessary Studenten& Studenten :: operator=(const Studenten & orig) { if ( &orig != this ) { delete [] pvorname; delete [] pname; matrikel = orig.matrikel; skz = orig.skz; pname = new char[strlen(orig.pname)+1]; strcpy(pname,orig.pname); pvorname = new char[strlen(orig.pvorname)+1]; strcpy(pvorname,orig.pvorname); } return *this; } // --------------------------------------------------------------------- ostream & operator<<(ostream & s, const Studenten & orig) { return s << orig.pvorname << " " << orig.pname << " , " << orig.matrikel << " , " << orig.skz; } // --------------------------------------------------------------------- // void Studenten :: Print(ostream & s) // { // s << pvorname << " "; // s << pname << " , "; // s << matrikel << " , " << skz << endl; // return; // }