Problem mit Vererbung unter Klassen
-
Hi,
ich fange gerade an mit der objectorientierten Programmierung und beschäftige mich gerade mit der Vererbung. Ich habe ein kleines Programm geschrieben um dies ein wenig zu üben. Es klappt soweit auch, jedoch verzweifel ich an einem Fehler:#include <iostream.h> #include <conio.h> #include <string.h> // ===================== // == Klasse Personen == // ===================== class personen { private: char vname[20]; char nname[20]; char geschlecht; char ort[20]; int alter; public: personen(); personen(char *, char *, char *, char *, int); void ShowPerson(void); void EditPerson(void); }; //Konstruktor ohne Parameter personen::personen() { strcpy(personen::vname, "Hallo"); strcpy(personen::nname, "Hallo"); personen::geschlecht = 's'; strcpy(personen::ort, "Hallo"); personen::alter = 0; } //Konstruktor personen::personen(char *vname, char *nname, char *geschlecht, char *ort, int alter) { strcpy(personen::vname, vname); strcpy(personen::nname, nname); personen::geschlecht = *geschlecht; strcpy(personen::ort, ort); personen::alter = alter; } //Ausgabe Personen void personen::ShowPerson(void) { cout << "\n\nName: " << vname << " " << nname << "\n"; cout << "Geschlecht: " << geschlecht << "\n"; cout << "Ort: " << ort << "\n"; cout << "Alter: " << alter << "\n"; } //Einlesen der Personendaten void personen::EditPerson(void) { cout << "Vorname: "; cin >> vname; cout << "Nachname: "; cin >> nname; cout << "Geschlecht: "; cin >> geschlecht; cout << "Ort: "; cin >> ort; cout << "Alter: "; cin >> alter; } // ======================== // == Subklasse Schueler == // ======================== class schueler : public personen { private: int note; char klasse[5]; public: schueler(); schueler(char *, char *, char *, char *, char *, int, int); void ShowSchueler(void); void EditSchueler(void); }; //Konstruktor ohne Parameter schueler::schueler() : personen() { strcpy(schueler::klasse, "Hallo"); schueler::note = 0; } //Konstruktor schueler::schueler(char *vname, char *nname, char *geschlecht, char *ort, char *klasse, int alter, int note) : personen(vname, nname, geschlecht, ort, alter) { strcpy(schueler::klasse, klasse); schueler::note = note; } //Ausgabe Schueler void schueler::ShowSchueler(void) { ShowPerson(); cout << "Klasse: " << klasse << "\n"; cout << "Note: " << note << "\n"; } //Einlesen der schuelerspezifischen Daten void schueler::EditSchueler(void) { EditPerson(); cout << "Klasse: "; cin >> klasse; cout << "Note: "; cin >> note; } // =================== // == Hauptprogramm == // =================== main(void) { schueler hmm("bla", "bla", "bla", "bla", "bla", 1, 2); personen bla(); bla.EditPerson(); bla.ShowPerson(); getch(); hmm.EditSchueler(); hmm.ShowSchueler(); getch(); }
Bei der siebten Zeile von unten "bla.EditPerson();" und der sechsten Zeile von unten "bla.ShowPerson();" meint mein Compiler "request". Aber ich kann damit nichts anfangen und weiß auch nicht was daran falsch ist, da es bei der anderen geht, wenn ich Prarameter mit übergebe.
Kann mir jemanden meinen Fehler erklären?
-
#include <iostream.h>
#include <conio.h>
#include <string.h>#include <iostream> #include <conio.h> #include <string> using namespace std;
main(void) {
int main( ) { ... return 0 }
personen bla();
personen bla;
außerdem vermischt du c mit c++.
-
Meinst du, wg. der char* ??? Ich muß ehrlich gestehen, dass mach ich auch manchmal ganz gern.
String ist zwar komfortabler, aber manchmal find ich's praktischer, wenn man sich da etwas Low-Level hält. Als zu hartes Vergehen würd' ich es aber nicht bezeichnen
E-the-Real
-
Meinst du, wg. der char* ???
afaik sind die conio.h und getch( ) c.
allerdings meinte ich eigentlich die char-arrays, was passiert denn wenn jemand einen namen mit mehr als 20 Zeichen eingibt?gerade bei benutzereingaben würde ich eher std:string's nehmen.
-
Jo, danke. Hatte die beiden Klammern immer übersehen beim erschaffen.
Das mit dem C und C++ vermischen liegt daran, dass ich bis vor ein paar Tagen nur reines C gemacht habe. Denke das wird sich demnächst noch legen.
Was gibt es denn bei C++ anstat getch();?