Vererbung in Klassen; HILFE
-
Hallo, ich habe Probleme bei einer Programmier-Aufgabe, die ich in der Uni gestellt bekommen habe.
Wir sollen ein Programm zum Verwalten von Lehrveranstaltungen erstellen.Mein Programm sieht immoment so aus:
#include <iostream> #include <string> using namespace std; class Lehrveranstaltung { protected: char Bezeichung[29]; char Uhrzeit[11]; short int Raumnummer; char Wochentag[2]; public: Lehrveranstaltung() { cout << "Bezeichnung\t = ? "; cin >> Bezeichung; cout << "Wochentag (Mo/Di/Mi/Do/Fr) \t= ? "; cin >> Wochentag; cout << "Raumnummer \t = ? "; cin >> Raumnummer; cout << "Uhrzeit: von-bis \t = ? "; cin >> Uhrzeit; }; void Anzeige(){ cout << Bezeichung << endl << Wochentag << " in Raum " << Raumnummer << endl << "Uhrzeit: " << Uhrzeit << endl; }; }; class Vorlesung : public Lehrveranstaltung { public: void Anzeige() { Lehrveranstaltung::Anzeige(); }; }; class Uebung : public Lehrveranstaltung { private: char Gruppe[1]; public: Uebung(){ cout << "Gruppe \t = ? "; cin >> Gruppe; }; void Anzeige() { Lehrveranstaltung::Anzeige(); cout << "Gruppe: " << Gruppe << endl; }; }; class Praktikum : public Lehrveranstaltung { private: char Betreuer[29]; public: Praktikum(){ cout << "Betreuer \t = ? "; cin >> Betreuer; }; void Anzeige() { Lehrveranstaltung::Anzeige(); cout << "Betreuer: " << Betreuer << endl; }; }; class Klausur : public Lehrveranstaltung { private: char Datum[10]; int AnzahlTeilnehmer; public: Klausur(){ cout << "Datum \t = ? "; cin >> Datum; cout << "Anzahl der Teilnehmer \t = ? "; cin >> AnzahlTeilnehmer; }; void Anzeige() { Lehrveranstaltung::Anzeige(); cout << "Datum \t " << Datum << endl << "Anzahl der Teilnehmer: " << AnzahlTeilnehmer << endl; }; }; int main() { cout << " -Vorlesung Informatik" << endl; Vorlesung Iv; cout << endl << "--Anzeige Vorlesung-- " << endl; Iv.Anzeige(); cout << endl << endl; cout << " -Uebung Informatik" << endl; Uebung Iu; cout << endl << "--Anzeige Uebung--" << endl; Iu.Anzeige(); cout << endl << endl; cout << " -Praktikum Informatik" << endl; Praktikum Ip; cout << endl << "--Anzeige Praktikum--" << endl; Ip.Anzeige(); cout << endl << endl; cout << " -Klausur Informatik" << endl; Klausur Ik; cout << endl << "--Anzeige Klausur--" << endl; Ik.Anzeige(); cout << endl << endl; system("PAUSE"); return 0; }Folgende Probleme treten auf:
1. Bei den abgeleiteten Klassen (Uebung, Praktikum und Klausur) wird das spezielle Attribut (also bei Uebung wäre es "Gruppe") bei der Ausgabe an den Wochentag gehängt, d.h. bei der Ausgabe steht dann zum Beispiel bei dem Praktikum "MoMueller" statt "Mo", wenn als Betreuer vorher "Mueller" eingegeben wurde.
Woran liegt das?2.Zudem lautete ein Teil der Aufgabe
"Implementieren Sie in main() exemplarisch die Lehrveranstaltung GIP mit je 1
Vorlesung, Übung, Praktikum und Klausur, indem Sie die entsprechenden
Objekte lokal (nicht dynamisch) erzeugen. Rufen Sie jeweils nach dem
Erzeugen eines Objektes dessen Methode Anzeige() auf, um die Werte der
Attribute anzuzeigen."
und ich bin mir nicht sicher ob ich die Aufgabe auf den Teil der Aufgabenstellung bezogen richtig umgesetzt habe.
Ich hatte in main() zunächst das Objekt "Lehrveranstaltung I", jedoch wurde der Konstruktor dann ausgeführt/es kam zur doppelten Abfrage der Daten, daher habe ich es so umgeändert.Ich danke jetzt schonmal sehr für hilfreiche Antworten.
Viele Grüße
-
Wenn du char-Arrays statt std::string verwendest, musst du auf die richtige Länge achten. Wenn dein Wochentag "Mo" lautet, fehlt dir in deinem Array Platz für das abschließende \0.
-
manni66 schrieb:
Wenn du char-Arrays statt std::string verwendest, musst du auf die richtige Länge achten. Wenn dein Wochentag "Mo" lautet, fehlt dir in deinem Array Platz für das abschließende \0.
Alles klar.
Danke, dieses Problem hat sich gelöst