Wenn fertig, bitte Fenster schließen
// Lösung zu abgeleiteten Klassen // Zuerst Dateien einbinden #include <iostream> #include <fstream> #include <string> using std::cout; using std::endl; using std::string; // Definition der Adressenklasse // Enthält der Einfachheit halber nur einen Namen class Address { string name; public: Address(); friend std::ostream& operator << (std::ostream& OS, const Address& obj); friend std::istream& operator >> (std::istream& IS, Address& obj); }; // Definition der Memberfunktionen // Standard-ctor, wird für Objektfeld immer benötigt Address::Address() {} // Gibt Adresse aus std::ostream& operator << (std::ostream& os, const Address& obj) { os << "Name: "; // Falls kein Name vorhanden, irgendwas ausgeben if (obj.name.length() == NULL) os << "unbekannt!\n"; // sonst Namen ausgeben else os << obj.name << endl; return os; } // Liest Adresse ein std::istream& operator >> (std::istream& is, Address& obj) { // Ganze Zeile einlesen getline(is,obj.name); return is; } // Von Address abgeleitete Klasse Student class Student: public Address { string course; public: Student(); friend std::ostream& operator << (std::ostream& os, const Student& obj); friend std::istream& operator >> (std::istream& is, Student& obj); }; Student::Student() {} // Gibt Studentendaten aus std::ostream& operator << (std::ostream& os, const Student& obj) { // Zuerst Adresse ausgeben operator << (os, (Address&)obj); // Nun Kurs ausgeben os << "Kurs: "; // Falls kein Kurs vorhanden, irgendwas ausgeben if (obj.course.length() == 0) os << "keiner belegt!\n"; // sonst Namen ausgeben else os << obj.course << endl; return os; } // Liest Studentendaten ein std::istream& operator >> (std::istream& is, Student& obj) { is >> (Address&)obj; // Kurs einlesen std::getline(is,obj.course); return is; } // Konstanten für Dateiname und Grösse des Objektfeldes const char* const pFILENAME = "PERS.DAT"; const int ARRAYSIZE=3; // main() Funktion int main() { int index; // Schleifenindex Student *pAddr; // Zeiger für Objektfeld // Objektfeld erstellen pAddr = new Student[ARRAYSIZE]; // Nun die Namen von der Tastatur einlesen cout << "Bitte Studenten-Daten eingeben.\n"; cout << "Zuerst den Namen und dann den Kurs.\n"; cout << "Beide Angaben bitte in getrennten Zeilen!\n"; for (index=0; index<ARRAYSIZE; index++) { cout << index+1 << ". Name:"; // Student einlesen std::cin >> pAddr[index]; } // Zur Kontrolle die eingelesenen Daten ausgeben cout << "\nGespeicherte Daten:\n"; for (index=0; index<ARRAYSIZE; index++) // Adresse ausgeben cout << pAddr[index]; // Nun Daten in Datei ablegen cout << "Speichere Daten jetzt in Datei " << pFILENAME << endl; // Datei öffnen std::ofstream outFile; outFile.open(pFILENAME); // Falls Datei erfolgreich geöffnet if (outFile) { // Daten ablegen for (index=0; index<ARRAYSIZE; index++) outFile << pAddr[index]; outFile.close(); } else cout << "Fehler beim Öffnen der Datei!\n"; // Objektfeld löschen delete [] pAddr; } |