Programmhilfe



  • Hier die Aufgabenstellung:

    Entwickeln Sie ein C/C++-Programm,
    in dem eine Personenklasse gemäß
    Klassendiagramm entwickelt wird. Die
    Klassendefinition befindet sich in einer
    Header-Datei, die Applikation in einer
    cpp-Datei. In der cpp-Datei werden
    drei Personen instanziiert. Zwei
    Personen heiraten. Dies ist aber nur
    möglich, diese Personen nicht
    verheiratet sind. Der Versuch der
    dritten Person m3, eine von zwei
    verheiraten Personen zu heiraten,
    muss scheitern. Die beiden
    verheirateten Personen lassen sich
    scheiden, dabei ist unerheblich, wer
    die Scheidung wünscht. Danach kann
    die dritte Person erfolgreich eine der
    ersten beiden Personen heiraten.
    Heirat ist nur möglich, wenn die
    Partner verschiedengeschlechtlich
    sind. Hierzu ist die Klasse um das
    Attribut (Objekt-Variable) char
    geschlecht zu erweitern.
    Weiterhin soll eine statische Klassen-
    Variable static int personenZaehler
    vorgesehen werden, die neu angelegte
    Instanzen hochzaehlt.
    Die Instanziierung und Aktivitäten der
    Personen sind in einer cpp-Datei
    namens appliP.cpp und die
    Klassendefinition in einer Datei
    namens Person.h unterzubringen.
    In der Klassenfunktion vorstellen() wird
    der Name der Person unf ggf. der
    Name des (Ehe-)Partners angezeigt.
    Anmerkung: Aus Gründen der
    Einfachheit sind Konstruktoren und
    Destruktoren nicht im Diagramm
    dargestellt. Der Schwerpunkt der
    Aufgabe liegt in der Gestaltung der
    Klassenfunktionen heiraten(...) und
    scheiden(). Sie sind verantwortlich für
    die Einhaltung der o. g. Regeln.
    Zerstören Sie bei Programmende alle
    Instanzen mit delete.

    "Da ich noch nicht so fähig bin bin ich erst bis dahin gekommen:" Würde mich freuen wenn ihr ein paar Ideen habt. Natürlich auch Kritik.

    Hier das Programm soweit wie ich bisher gekommen bin:

    #include<iostream>
    #include<string>

    using namespace std;

    class CPerson{
    string name;
    string nachname;
    CPerson * partner;
    static int z1; //Klassenvariable
    int z; //Objektvariable

    public:
    CPerson(string n,string m){
    cout<<"Neue Instanz..."<<endl;
    name = n;
    nachname = m;
    partner = NULL;
    z1++; //Klassenvariable
    z=z1;
    }

    void vorstellen(){
    cout<<"Hallo ich bin Objekt "<< z <<" "<<name<<nachname;
    if(partner !=NULL)
    cout<<", mein Partner ist "
    <<partner->name
    <<partner->nachname
    <<endl;

    }//vorstellen

    void partnern(CPerson &p){
    cout<<"\n";
    this->partner = &p;
    partner->partner = this;

    }//partnern

    };//CPerson

    int CPerson::z1 = 0;

    int main(){

    CPerson p1("Ingeborg"," Von der Knutsen\n");
    p1.vorstellen();

    CPerson p2("Alfred"," Hitchacker\n");
    p2.vorstellen();

    CPerson p3("Thomas"," Heck\n");
    p3.vorstellen();

    p1.partnern(p2);
    p1.vorstellen();
    p2.vorstellen();

    cout<<endl;
    getchar();
    return 0;
    }//main



  • Sieht doch schon ganz anständig aus. Eine Frage: Wieso übergibst du die Namen-Strings mit Space am Anfang und \n am Ende? Das gehört nicht zum Namen, sollte also auch nicht gespeichert werden. Wenn du eine neue Zeile willst, dann musst du die eben einfach bei der Ausgabe anhängen. Aber sowas abzuspeichern, führt dann später zu Problemen wenn man das Programm ändern muss.
    Beim partnern fehlt noch die Abfrage, ob beide noch keinen Partner haben. Ebenso eine Abfrage, ob das Geschlecht des Objekts ungleich des Geschlechts des zu Heiratenden ist. Zur Festlegung des Geschlechts wirst du wohl am besten eine zusätzliche Variable einführen und diese beim Instanziere gleich mit übergeben.
    Scheiden ist dann analog, erst prüfen, ob man mit der Person, von der geschieden werden soll, überhaupt verheiratet ist, dann gleich die beiden Pointer auf Null setzen.
    Destruktor mit delete fehlt noch, laut Angabe wird er gefordert.
    Und die Klassendefinition kommt in eine extra .h-Datei, die Methoden der Klasse (also heiraten(..), scheiden(), vorstellen()) kommt in die appliP.cpp.



  • aus versehen selbst zitiert statt editiert, sry...



  • So, bin dran und versuche es heute noch hinzubekommen dann stelle ich es nochmal rein. Aber schon mal vielen Dank für deine Tipps

    Gruß maurice



  • [...] die Klassendefinition in einer Datei namens Person.h unterzubringen. [...]

    Ich finde den permanenten Gebrauch der Möglichkeit, dass sich Methoden auch in Headerdateien definieren lassen, nicht gut. Würde man alle Methoden so definieren würde der Quelltext schnell sehr chaotisch aussehen.

    Vielleicht ist aber auch dem Autor der Aufgabenstellung der Unterschied zwischen Deklaration und Definition nicht bewusst gewesen.

    Ich würde dir raten eine Datei person.h (man beachte die Groß- / Kleinschreibung des Dateinamens 😉 ) für die Deklaration und eine Datei person.cpp für die Definition / Implemenatation zu verwenden.


Anmelden zum Antworten