Konstruktor mit Vererbung
-
Hallo,
ich habe ein Problem einen Konstruktor zu Programmieren der die Klasse Large von Research initialisiert.1. Klasse mini nimmt Werte auf und gibt sie aus , hat geklappt.
2. Klasse Large mit den festen Anfangswerten ausgeben. Klappt nicht. Ich kann auf die Variablen der Klasse Mess nicht zugreifen. Auf die Werte der Klasse Research schon.
Ich poste mal das Listing. Interessant ist nur der Konstruktor in der Klasse und am Ende.
Schon mal vielen Dank
Tom//Einstufige Vererbung.cpp
#include <iostream.h>
#include <string.h>class mess //Klassentyp mess
{
double velocity; //ohne Bezeichnung automatisch private
protected: //Methoden können auch in der abgeleiteten Klasse stehen
char type [20];
public:
void set_velo(double);
double get_velo(void);};
class research: public mess //Vererbung aller Elemente aus der Klasse mess ohne Änderung
{ //: = Vererbung, public = ohne Veränderung
int number;
public:
char producer[25];
void set_number(int);
int get_number(void);
void set_type (char*);
char* get_type(void);
research(int,char*,int,char);
research();};
research::research(int v1, char * t1, int n1, char p)
{velocity=v1;
strcpy(type,t1);
number=n1;
producer=p;
}research::research(void)
{}void mess::set_velo(double v1) //Methode zum Zugriff auf die Variable velocity
{
velocity=v1;
}
double mess::get_velo(void)
{
return velocity; //Methode zur Ausgabe der Variable velocity
}
void research::set_type(char* t1)
{
strcpy (type,t1);
}
char* research::get_type (void)
{
return type;
}
void research::set_number(int n1)
{
number=n1;
}
int research::get_number(void)
{
return number;
}void main(void)
{
int velo;
char ty[20];
int nu;research mini; //mini = Objekt
cout << "\nBitte die Geschwindigkeit eingeben: ";
cin >> velo;
cout << "\nBitte das Typenmodell eingeben: ";
cin.ignore (80,'\n'); //Löschen des Tastaturspeichers max 80 Zeichen oder Ende der Eingabe
cin.get (ty, 20); //auch Eingabe mit Leerzeichen möglich
cout << "\nBitte die Stueckzahl eingeben: ";
cin >> nu;
cout << "\nBitte den Hersteller eingeben: ";
cin.ignore (80,'\n');
cin.get (mini.producer, 25);
mini.set_velo(velo);
mini.set_type(ty);
mini.set_number(nu);
cout << "\nKontrollausgabe: \n";
cout << "\nGeschwindigkeit: " << mini.get_velo() << "\n";
cout << "\nTypenmodell: " << mini.get_type() << "\n";
cout << "\nStueckzahl: " << mini.get_number() << "\n";
cout << "\nHersteller: " << mini.producer << "\n";research large(148,7,"Passat GL",48,'VW'); // Erstellen des Objektes large mit Übergabewert // 48 an den Konstruktor der Klasse research
cout << "\nKontrollausgabe: \n";
cout << "\nGeschwindigkeit: " << large.get_velo() << "\n";
cout << "\nTypenmodell: " << large.get_type() << "\n";
cout << "\nStueckzahl: " << large.get_number() << "\n";
cout << "\nHersteller: " << large.producer << "\n";}
-
class research: public mess //Vererbung aller Elemente aus der Klasse mess ohne Änderung
FALSCH !!!
Vererbung aller public und protected Member. Dabei gilt public bleibt public
und protected bleibt protected.Deine Member von mess sind teilweise private. =>
-
Und wie kann ich dann einen Konstrutor mit Werten initialisieren. Geht das nur über die Funktionen?
-
Wenn du Member der Basisklasse ansprechen musst dann dürfen sie halt nicht
private sein. Am einfachsten machst velocity auch protected, dann passts.
-
schau dir mal initialisierungslisten an, und konstruktoraufruf in intitialisierungslisten (der basisklasse)
mal ein eben hingehauenes beispiel:
#include <iostream> #include <string> using namespace std; class mess { private: double velocity; protected: string type; public: mess(double v, string t): velocity(v),type(t){} }; class research: public mess{ private: int number; string producer; public: research(int v1, string t1, int n1, string p) : mess(v1, "test"), number(n1), producer (p){} }; int main(){ research test(3,"hallo", 3, "test"); }
-
Danke, hat mir geholfen.
Tom