Mehrfachvererbung

amine89

Mitglied
Guten Tag zusammen !

ich habe ein kleines Problem mit einer Aufgabe und zwar , der Compiler gibt mir einen falschen Wert für die Variable "

MitarbeiterID" zurück , obwohl ich im main() Programm anderen wert eingegeben habe .

Vlt kann mir da jmd helfen !

Danke schön im Voraus.

das ist mein Programm :

C++:
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;


// Klasse  Person ;
class Person {
	
	public :
	string  Name;
	short   GeburtsJahr;
	
	Person(){
	string	Name="NULL";
	short	GeburtsJahr=0;
	};
	
	Person(string _Name,short _GeburtsJahr){
		
		this->Name=_Name;
		this->GeburtsJahr=_GeburtsJahr;
	}
	
	void print(){
		cout<<"Name\n"<<Name<<"GeburtsJahr\n"<<GeburtsJahr<<endl;
	}
	
};

// Klasse Mitarbeiter ;
class Mitarbeiter{
	
	public :
    string	Abteilung;
	short	MitarbeiterID;

    Mitarbeiter(){
    	
	string	Abteilung="NULL";
	short	MitarbeiterID=0;
	};
	
	Mitarbeiter(string _Abteilung,short _MitarbeiterID){
		
		this->Abteilung=_Abteilung;
		this->MitarbeiterID=_MitarbeiterID;
	}
	
	void print(){
		cout<<"Abteilung\n"<<Abteilung<<"MitarbeiterID\n"<<MitarbeiterID <<endl;
	}
};

// klasse Student;
class Student: public Person, public Mitarbeiter{
	public :
	string StudienGang;
	int   MatNr; 
	
	Student(string Name, short GeburtsJahr, string Abteilung, short MitarbeitID, string _StudienGang, int _MatNr):Person(Name,GeburtsJahr),Mitarbeiter(Abteilung,MitarbeiterID){

		this->StudienGang=_StudienGang;
		this->MatNr=_MatNr;
		
	};
	
		void print(){
		cout<<"Name:"<<Name<<"\n"<<"GeburtsJahr:"<<GeburtsJahr<<endl;
		cout<<"Abteilung:"<<Abteilung<<"\n"<<"MitarbeiterID:"<<MitarbeiterID<<endl;
		cout<<"StudienGang:"<<StudienGang<<"\n"<<"MatNr:"<<MatNr<<"\n\n\n"<<endl;
	}
	
};

int main (){
	
   Student* hugo;
   Student* anna;
   
    hugo = new Student("Hugo",1995,"Automatisierung",4321,"ET/AU",110123);
    
    anna = new Student("Anna",1983,"Verkauf",5213,"BWL",110456);
	
	hugo->print();
	anna->print();
	
    system("pause");
	return 0;
	
}
 
Zuletzt bearbeitet:
Hallo,

was mir als erstes auffällt, ist dass du im Default-Constructor der Klasse "Mitarbeiter" neue Variablen definierst, statt die public Felder zu benutzen.

Statt

C++:
Mitarbeiter() {
    string Abteilung = "NULL";
    short MitarbeiterID = 0;
}

sollte es wohl eher

C++:
Mitarbeiter() {
    this->Abteilung = "NULL";
    this->MitarbeiterID = 0;
}

heissen. Das Gleiche gilt für die Klasse Person.

Welcher Wert wird denn auf deiner Konsole ausgegeben?

Gruß,
Wolf
 
Zuletzt bearbeitet von einem Moderator:
Hi.

In C++ sollte man allerdings die Initialisierungslisten verwenden:

C++:
Mitarbeiter()
: Abteilung("NULL"),
  MitarbeiterID(0)
{
}
Nur größere Initialisierungen / Berechnungen sollten in den Konstruktorblock.
 
Hallo

Irgendwie gibt es da wohl ein Durcheinander mit den Variablenbezeichnern.
MitarbeitID ist nicht MitarbeiterID !
 
Zuletzt bearbeitet:
Danke deepthroat. Bei dem Coding Style sind solche Fehler fast zu erwarten.

@amine89: Anhand der Bezeichner sollte man meiner Meinung nach schon erkennen, ob es sich um Membervariablen oder lokale Variablen handelt. Membervariablen kann man z.B. ein "m_" voranstellen.

Gruß
mbmun
 
Zurück