Aufteilung von Klassen



  • Hallo,
    ich bin gerade dabei, mir C++ beizubringen. Ich möchte nun mal ein kleines Progrämmchen schreiben,um das bisher gelernte zu testen.
    Ich bin nicht ganz sicher, ob ich das mit den Aufteilungen der Dateien richtig verstanden habe. Mach ich es richtig, wenn ich für jede Klasse eine Header Datei anlege, in der die Klassen Deklaration, die Definition der Elementvariablen der Klasse und die Funktionsprototypen drin stehen?
    Anschließen lege ich eine entsprechende cpp-Datei an, in der die Definition der Klasse bzw der Methoden drin steht, also sozusagen die Funktionsköper.
    Schließlich noch eine Hauptdatei, die die main funktion enthält, in der all die Klassen erzeugt und benutzt werden.
    Also so meine ich das:

    employee.h
    ----------
    class employee
    {
    string strVorname;
    string strNachname
    double dblAlter;

    void setVorname(string strVorname);
    string getVorname();
    void setNachname(string strNachname);
    string getNachname();
    void setALter(double dblAlter);
    double getAlter();
    }

    employee.cpp
    ------------
    #include "employee.h"

    employee::setVorName(string strVorname)
    {
    employee::strVorname = strVorname;
    }

    employee::getName()
    {
    return strVorname;
    }

    employee::setNachname(string strNachname)
    {
    employee::strNachname = strNachname;
    }

    employee::getNachname()
    {
    return strNachname;
    }

    employee::setAlter(double dblAlter)
    {
    employee::dblAlter = dblAlter;
    }

    employee::getAlter()
    {
    return dblAlter;
    }

    mainProgramm
    ------------

    #include <iostream>
    #include "employee"

    void main()
    {
    employee mitarbeiter;
    mitarbeiter.setVorname = "Klaus";
    mitarbeiter.setNachname = "Müller";
    mitarbiter.setalter= 30;

    cout<<"Der Mitarbeiter: "<<mitarbeiter.getVorname<<" "
    <<mitarbeiter.getNachname<<" "<<"ist: "<<mitarbeiter.getAlter<<" Jahre
    <<endl;
    }

    So, Fertig...ein ganz simples Beispiel. Ist das so richtig aufgeteilt? Deklaraiton im Header, Quellcode in der cpp Datei und benutzen in main?
    Aber woher weiss main vom Quellcode der Methoden? Man bindet doch nur die Header datei ein oder?
    Und legt man wirklich für jede einzelne Klasse eine eigene Header Datei an? Oder fasst man mehrere zusammen?
    Hat jemand einen Tipp für mich?
    Danke im voraus 🙂

    paloncino



  • ist sicher nicht falsch!

    relativ übersichtlich und gut zu warten, ist meine meinung!



  • das dürft aber nicht funktionieren!

    paloncino schrieb:

    employee mitarbeiter;
    mitarbeiter.setVorname = "Klaus";    //kann erstmal nicht aufgerufen werden, da sie private ist!
    mitarbeiter.setNachname = "Müller";  //wie willst du einer funktion einen wert zuweisen?
    mitarbiter.setalter= 30;             //wenn dann:   mitarbeiter.setAlter(30);
    


  • Hallo,

    das hab ich übersehen, die Kritik ist berechtigt. Die Zugriffsfunktionen sind privat, ein Zugriff würde nicht funktionieren. In diesem Fall war das ein Flüchtigkeitsfehler, kein Mangel an Know-How. Danke für den Hinweis. Öffentliche Schnittstellen sollten auch public deklariert werden 🙂
    Und natürlich wird der Funktion der Wert in Klammern übergeben, nicht als zuweisung wie einer Variablen. Auch das ist mir eigentlich klar.
    Mir ging es hauptsächlich um die logische Aufteilung der Klassen. Da in dieser Hinsicht keine Kritik kam, gehe ich davon aus, dass man es so machen kann.
    Danke für eure Antworten 🙂

    Paloncino



  • Also natürlich hab ich mir nicht den code angeschaut, sondern nur ein statement zu deiner frage abgegeben!

    Und wie gesagt, diese Methode finde ich gut und übersichtlich!



  • Und noch was ganz nebenbei:

    void main() war afaik noch nie Standard. Stattdessen int main()

    Caipi



  • Caipi schrieb:

    Und noch was ganz nebenbei:

    void main() war afaik noch nie Standard. Stattdessen int main()

    Caipi

    stimmt schon, wobei in vielen tutorials auch oft mit void main() gearbeitet wird.... 😮



  • Hallo

    Ich hätte noch 2 kleine Tips für dich und zwar werd ich dir die an diesem Beispiel erläutern:

    employee::setVorName(string strVorname)
    {
    employee::strVorname = strVorname;
    }

    also erstens würd ich das String-Argument anders nennen, also zb strVName, denn dann brauchst du das Element strVorname deiner Klasse nicht mit dem Bereichsoperator :: ansprechen, sondern kannst dann direkt schreiben:

    strVorname=strVName;

    Diese Sache is jetzt vielleicht doch nicht so wild aber etwas anderes würd ich dir empfehlen.
    So "kleine" Methoden wie diese würde ich direkt in der Klasse (also da wo jetzt nur der Prototyp steht) definieren. Dadurch werden sie implizit als inline definiert und somit spart es eine Menge Zeit, denn das Programm muss nicht erst die Rücksprungadresse sichern und einen Hin- und Rücksprung durchführen, was in diesem Fall mehr Zeit kostet als das Ausführen der Funktion selbst.

    Mfg _Ocin_



  • Hallo,
    danke für eure Hilfe 🙂
    Ocin, du hast recht, die Variblen unterscheidbar zu benennen erspart den Bereichsauflösungsoperator.
    Zum Thema Inline Funktionen: wie machst du es denn? Du hast ja recht, aber irgendwie "riecht" das nach Misch Masch. Wäre es nicht besser, dann gleich in die Header Datei die Klasse zu deklarieren UND zu definieren. Wozu eigentlich in der Header Datei die Deklaration und die Implementierung in der cpp Datei?
    Könnte man es nicht grunfsätzlich zusammenfassen? Wie wird es in der Praxis denn gemacht? Bisher habe ich gelesen, dass die Deklaration im Header und die Implentierung in einer cpp Datei gemacht wird. Ich dachte mir auch gleich, dass man das doch zusammnfassen könnte in der Header Datei. Was sagst du dazu? Würde mich sehr interessieren. 🙂
    Grüße

    paloncino


Anmelden zum Antworten