Klasse "Angestellter"


  • Mod

    scanbot90 schrieb:

    da es für mich leider noch nicht verständlich ist, hab ich hier diesen Beitrag geöffnet. Freut mich wenn du Ahnung hast und das Prinzip verstanden hast.. Aber gib mir auch die Chance das zu verstehen.

    Dann stell Fragen! Derzeit fragst du bloß, ob dir jemand die Hausaufgaben machen kann.

    edit: Anscheinend hast du inzwischen Fragen hinzugefügt. Dann wirst du sicher auch bald Antworten bekommen.



  • scanbot90 schrieb:

    da es für mich leider noch nicht verständlich ist, hab ich hier diesen Beitrag geöffnet. Freut mich wenn du Ahnung hast und das Prinzip verstanden hast.. Aber gib mir auch die Chance das zu verstehen.

    Vielleicht solltest du deine Unterlagen kontaktieren - so kontextfrei deine Aufgabe hier rein zu posten wird zum Ratespiel.



  • Eine konkrete Frage die ich habe ist: ist der Ansatz richtig?



  • Zeus schrieb:

    scanbot90 schrieb:

    da es für mich leider noch nicht verständlich ist, hab ich hier diesen Beitrag geöffnet. Freut mich wenn du Ahnung hast und das Prinzip verstanden hast.. Aber gib mir auch die Chance das zu verstehen.

    Vielleicht solltest du deine Unterlagen kontaktieren - so kontextfrei deine Aufgabe hier rein zu posten wird zum Ratespiel.

    Das ist der komplette Kontext. 🙂



  • scanbot90 schrieb:

    Zeus schrieb:

    scanbot90 schrieb:

    da es für mich leider noch nicht verständlich ist, hab ich hier diesen Beitrag geöffnet. Freut mich wenn du Ahnung hast und das Prinzip verstanden hast.. Aber gib mir auch die Chance das zu verstehen.

    Vielleicht solltest du deine Unterlagen kontaktieren - so kontextfrei deine Aufgabe hier rein zu posten wird zum Ratespiel.

    Das ist der komplette Kontext. 🙂

    Mit Sicherheit nicht - schon etwas von Konstruktor und Kapselung gehört?



  • Achtung Auto-Analogie: Vor Ihnen steht eine durchgeweichte Pappschachtel. Welche Probleme hat dieses Auto? Beheben Sie diese.



  • Bashar schrieb:

    Achtung Auto-Analogie: Vor Ihnen steht eine durchgeweichte Pappschachtel. Welche Probleme hat dieses Auto? Beheben Sie diese.

    😃 ja so ungefähr kann man die Aufgabenstellung vergleichen.
    Aus dem Grund habe ich auch diesen Beitrag geöffnet. Weil ich als Einsteiger bin einfach planlos.

    Und der Begriff Konstruktor sagt mir was, aber da könnte ich nur Wikipedia oder eine andere Informationsquelle zitieren.


  • Mod

    SeppJ schrieb:

    edit: Anscheinend hast du inzwischen Fragen hinzugefügt. Dann wirst du sicher auch bald Antworten bekommen.

    Ich gehe dann mal voran:

    scanbot90 schrieb:

    für 1): Es ist nicht deklariert welcher Teil Public,Private,Protected ist.
    Bei dieser Klasse sollte "int Gehalt" private sein, damit man von außen nicht darauf zugreifen kann. "int Betriebsangehörigkeit" (würde ich jetzt spontan) in Protected setzten und den Rest "int alter" und "char *Name" auf Public

    Nein, nichts davon würde ich als direktes Problem ansehen. Alle Member hier sind private (Defaulsichtbarkeit bei class) und das ist auch gut so. Es fehlen jedoch irgendwelche Methoden, um überhaupt mit der Klasse etwas zu tun, wodurch sie derzeit unbenutzbar ist. Man könnte als reine Datensammelhalde alles public machen (oder struct statt class benutzen, da ist die Defaultsichbarkeit public). Ich tendiere dazu, dass letzteres gemeint ist, da sonst die Aufgabe 2 unmöglich wird, da wir nicht wissen, was die Klasse überhaupt tun soll und daher keine Methoden schreiben können.

    Dir wirklich dringenden Probleme:
    - C-Strings, noch dazu in Form von Zeigern, anstatt C++-Strings. Das lädt unzählige unnötige Fehlerquellen ein. Es macht den Einsatz der Klasse extrem frickelig und man muss allerhöchste Vorsicht wahren lassen.
    - Angabe eines Alters. Schlechtes Design, denn das Alter verändert sich ganz natürlich mit der Zeit. Daher fragen auch alle immer nach dem Geburtsdatum, wenn sie eigentlich nur das Alter brauchen.
    - Betriebsangehörigkeit kommt mir als int ein bisschen komisch vor. Das schreit eigentlich nach einer eigenen Klasse. Eine Betriebsangehörigkeit ist kein Zahlenwert mit dem man irgendwie rechnen kann. Genau dies wird aber durch einen int ausgedrückt. Kann man aber behelfsweise so stehen lassen, wenn man irgendwo anders im Programm fest vereinbart, welcher Wert was bedeutet. Eine bessere Lösung liegt wahrscheinlich noch jenseits des Lernstoffes.
    - Gleiches gilt für den Gelddatentyp. Mit Geld kann man zwar rechnen, aber Geld ist auch irgendwie mit einer Einheit verknüpft, die hier außen vor gelassen wird. Wieder ist das aber noch ok, das so zu machen. Man hat dann eben irgendwo im Programm fest die Einheit vereinbart. Es gäbe wesentlich schlechtere Lösungen*. Eine gute Lösung liegt wohl wieder außerhalb des Erwartungshorizonts (wahrscheinlich sogar außerhalb der Fähigkeiten des Aufgabenstellers 😉 )

    *: Falls hier hinterher in der Musterlösung so etwas wie float oder double vorgeschlagen werden sollte, dann renn bitte sofort schreiend(!) raus und geh nie wieder zu diesem Kurs. Es ist zu deinem Besten.



  • SeppJ schrieb:

    - Betriebsangehörigkeit kommt mir als int ein bisschen komisch vor.

    Ich vermute, damit ist die bisherige Dauer der Betriebsangehörigkeit gemeint.


  • Mod

    Bashar schrieb:

    SeppJ schrieb:

    - Betriebsangehörigkeit kommt mir als int ein bisschen komisch vor.

    Ich vermute, damit ist die bisherige Dauer der Betriebsangehörigkeit gemeint.

    Dann ist der Bezeichner offensichtlich schlecht gewählt. Beweis dafür ist meine falsche Interpretation.

    Falls die Dauer der Betriebsangehörigkeit gemeint ist, gilt das gleiche wie für das Alter. Zählt man bei so etwas in der Betriebswirtschaft auch eventuelle vorherige Anstellungen im gleichen Betrieb (wo man nachher bei einem anderen Betrieb war oder Pause machte)? Falls ja, dann muss der Datentyp diese ebenfalls aufnehmen können, müsste also dynamisch sein. Vermutlich ebenfalls wieder weit über dem Erwartungshorizont.

    P.S.: @Threadersteller: Siehst du, wie sehr sich Threadklima und Inhalt verändern, wenn man nicht bloß stumpf seine Hausaufgaben hinklatscht?



  • @SeppJ und Bashar:

    Diese Aufgabenstellung steht so wie ich es hier gepostet habe in meinem Skript.. Komplett ohne Zusammenhang.
    Ich soll "einfach" eine Klasse Deklarieren, die keine Probleme mit diesen Membern mit sich bringt.
    Und ich als Einsteiger sitz gerade nur davor und denk mir wtf..?! 😃



  • scanbot90 schrieb:

    @SeppJ und Bashar:

    Diese Aufgabenstellung steht so wie ich es hier gepostet habe in meinem Skript.. Komplett ohne Zusammenhang.
    Ich soll "einfach" eine Klasse Deklarieren, die keine Probleme mit diesen Membern mit sich bringt.
    Und ich als Einsteiger sitz gerade nur davor und denk mir wtf..?! 😃

    Und welche Themen hast du bis jetzt durchlesen müssen - ich meine die Aufgabe wird doch nicht auf der erste Seite stehen?



  • P.S.: @Threadersteller: Siehst du, wie sehr sich Threadklima und Inhalt verändern, wenn man nicht bloß stumpf seine Hausaufgaben hinklatscht?

    jop habs gemerkt 😉 und vielen Dank für die bisherigen Kommentare/Hilfestellungen 🙂



  • Zeus schrieb:

    Und welche Themen hast du bis jetzt durchlesen müssen - ich meine die Aufgabe wird doch nicht auf der erste Seite stehen?

    Thema das Parallel zu diesen "Laboraufgaben" steht ist: deklarieren einer Klasse. bzw. einstieg in objektorientierte softwareentwicklung.


  • Mod

    scanbot90 schrieb:

    Zeus schrieb:

    Und welche Themen hast du bis jetzt durchlesen müssen - ich meine die Aufgabe wird doch nicht auf der erste Seite stehen?

    Thema das Parallel zu diesen "Laboraufgaben" steht ist: deklarieren einer Klasse. bzw. einstieg in objektorientierte softwareentwicklung.

    Dir wird doch in deiner bisherigen Schulkarriere schon aufgefallen sein, dass Übungsaufgaben sich häufig an den ein oder zwei vorhergehenden Lektionen orientieren. Daran kannst du den Erwartungshorizont des Lehrers ausmachen. Wenn da viel über public/private stand, dann schreib ein paar Worte darüber. Falls da tatsächlich etwas zum Datentyp von Geld oder ähnlichem gestanden haben sollte, dann wird auch das erwartet, falls nicht, dann höchstwahrscheinlich eher nicht und int ist ok (siehe meinen Beitrag oben). So kannst du mit allen Sachen die ich angesprochen habe ungefähr prüfen, ob und was genau erwartet wird.



  • Ich danke allen, die mir zu diesem Beitrag geholfen haben oder werden.



  • habe jetzt mal eine classe dafür geschrieben:

    #include <iostream>
    using namespace std;
    
    class Angestellter
    {
    public:
        Angestellter(char *Name, int Alter, int Betriebsangehoerigkeit, int Gehalt, int PNummer);
        m_name(*Name);
        m_alter(Alter);
        m_betriebszugehoerigkeit(Betriebszugehoerigkeit);
        m_gehalt(Gehalt);
        m_pnummer(PNummer)
        {
        };
        char getName(){ return m_name; }
        int getAlter(){ return m_alter; }
        int getBetriebszugehoerigkeit(){ return m_betriebszugehoerigkeit; }
        int getGehalt(){return m_gehalt;}
        int getPNummer(){return m_pnummer;}
        void info()
        {
            cout << "Name: " << m_name << endl;
            cout << "Alter: " << m_alter << endl;
            cout << "Betriebszugehoerigkeit: " << m_betriebszugehoerigkeit << endl;
            cout << "Gehalt: " << m_gehalt << endl;
            cout << "PNummer: " <<   m_pnummer << endl;
        }
    
    private:
        char m_name;
        int m_alter;
        int m_betriebszugehoerigkeit;
        int m_gehalt;
        int m_pnummer;
    };
    

    kann mir jemand beim ausbessern helfen?


  • Mod

    Die Sachen die ich zum Namen gesagt habe, gelten garantiert. char* als Datentyp geht gar nicht, du bist nicht einmal konsistent in der Nutzung. Was sind betzuge? warum sind nun auf einmal mehr Datenfelder (pnummer) da als vorher? Wo kommt das her? Steht da doch mehr bei der Aufgabe?

    Der Code ist voller Syntaxfehler, wie zum Beispiel falsch gesetzter Semikolons. Darüber sollte sich aber der Compiler schon beschweren, das brauche ich dir nicht sagen.

    Sei ordentlich in der Einrückung, dann kann man das auch lesen.

    Programmier nicht durch Ausprobieren. In Zeile 4 hast du einen Fehler gehabt und hast so lange verschiedene Zeichen ausprobiert, bis der Fehler weg war, ohne zu verstehen, was du getan hast. Entsprechend ist es völliger Unsinn, der eigentliche Fehler war ein ganz anderer, du hast bloß den einen Fehler durch einen anderen Fehler kompensiert.

    c.rackwitz schrieb:

    Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.



  • @scanbot90
    Falls es dir noch keiner gesagt hat: die Semantik der Datenfelder hat einen Bug. Welches Feld und welcher Bug findest du selbst raus. Hoffentlich.
    (Genaugenommen sind es mehrere Bugs, aber zumindest einer davon ist gravierend)


Anmelden zum Antworten