allgemeine Frage zu Klassen



  • So jetzt meld ich mich schon wieder aber bin gerade am lernen und in der Suche habe ich nichts gefunden.

    ich habe also eine Klasse Mitarbeiter. In der sind als private gehalt und name abgespeichert.

    jetzt hab ich noch eine Personal Klasse in der als Privat ein Feld angelegt ist vom Typ Mitarbeiter.

    Jetzt habe ich eine Methode für die Klasse Personal die das Feld befüllt.

    Jetzt wollt ich ne neue methode für die Klasse Personal anlegen die das gehalt des jeweilen Mitarbeiter ausliest. (methodenname: mittel)

    Dafür habe ich eine methode getGehalt der Klasse mitarbeiter angelegt. Und in der Methode mittel habe ich dann in einer Schleife angegeben:

    feld[i].getGehalt();

    aber das funktioniert nicht, er gibt da nichts aus. ist ihm in dieser methode das feld von der methode die das feld befüllt nicht bekannt?

    Hier vielleicht mal der Code:

    MAIN:

    #include <iostream>
    #include "Mitarbeiter.h"
    #include "Personal.h"
    
    using namespace std;
    
    int main()
    {
    //	Mitarbeiter a;
    	Personal a;
    int tmp;
    	a.init();
    	tmp = a.mittel();
    
    //	a.setDaten();
    //	a.getDaten();
    	return 0;
    }
    

    Mitarbeiter.h

    #ifndef Mitarbeiter_h 
    #define Mitarbeiter_h
    
    class Mitarbeiter
    {
    public:
    
    	void setDaten();
    	int getGehalt();
    	void getDaten();
    
    private:
    
    	char name[20];
    	int gehalt;
    };
    
    #endif
    

    Mitarbeiter.cpp

    #include <iostream.h>
    #include "Mitarbeiter.h"
    
    void Mitarbeiter::setDaten()
    {
    	cout << "Geben Sie das Gehalt ein: " << endl;
    	cin >> gehalt;
    	cout << endl;
    	cout << "Geben Sie den Namen ein:  " << endl;
    	cin >> name;
    	cout << endl;
    };
    
    void Mitarbeiter::getDaten()
    {
    	cout << "Mitarbeiter: " << name << endl;
    	cout << "Gehalt: " << gehalt << endl;
    
    };
    
    int Mitarbeiter::getGehalt()
    {	cout << gehalt;
    	return gehalt;
    };
    

    Personal.h

    #ifndef Personal_h
    #define Personal_h
    #include "Mitarbeiter.h"
    
    class Personal:public Mitarbeiter
    {
    public:
    	  void init(void);
    	  int mittel(void);
    private:
    
    	int anzahlMitarbeit;
    	Mitarbeiter* feld;
    
    };
    
    #endif
    

    Personal.cpp

    #include<iostream.h>
    #include "Personal.h"
    
    void Personal::init(void)
    {
    	cout << "Wieviel Mitarbeiter sollen aufgenommen werden? " << endl;
    	cin >> anzahlMitarbeit;
    
    	feld = new Mitarbeiter[anzahlMitarbeit];
    
    	for(int i=0; i<anzahlMitarbeit; i++)
    	{
    		feld[i].setDaten();
    	};
    	for (int j=0; j<anzahlMitarbeit; j++)
    	{
    		feld[j].getDaten();
    	};
    
    };
    
    int Personal::mittel(void)
    {   int tmp = 0;
    
    	for(int i=0; i<anzahlMitarbeit; i++)
    	{	
    		tmp+=feld[i].getGehalt();
    
    	};
    	tmp /= anzahlMitarbeit;
    
    	return tmp;
    };
    

    Ich hoffe ihr versteht was ich meine.



  • Ich versteh zwar nicht wirklich was du meinst. Aber warum kombinierst du den veralteten iostream.h-Header und den neuen iostream-Header? Das ist gut eine Quelle für unerfreuliche udn schwer findbare Fehler.

    Das er nichts ausgibt kann daran liegen, dass du den Ausgabe Buffer nicht flushst. Wenn er die Methode nicht kennen würde, würde er ja einen Fehler beim kompilieren liefern 🙄

    Außerdem solltest du lieber Konstruktoren und Destruktoren anstelle von init-Methoden benutzen 🙄



  • hat sich erstmal erledigt.


Anmelden zum Antworten