Klasse um Mengen von INT zu verwalten



  • In der Programmiersprache PASCAL gibt es den abgeleiteten Datentyp Set. Er stellt die Nachbildung des mathematischen Begriffs der Menge dar. Der so definierte Datentyp beinhaltet ein statisches Feld des Grunddatentyps, in dem die Elemente der Menge abgespeichert werden. Dabei ist die Eigenschaft der Menge zu beachten, daß jedes Element nur einmal in der Menge auftreten kann.

    Entwickeln Sie eine C++-Klasse, die eine solche Menge von int-Werten verwaltet.

    Dafür muss ich folgende Klassendefinition verwenden:

    #ifndef MENGE_H
    #define MENGE_H
    const unsigned int Dim=256;
    class IntMenge
    { public:
       IntMenge(void);                    // Standardkonstruktor
       IntMenge(unsigned int,int*);       // Konstruktor, der ein Feld von
                                          // int-Werten in die Menge eintraegt
       IntMenge &Vereinigung(IntMenge&);  // Vereinigung zweier Mengen
       IntMenge &Durchschnitt(IntMenge&); // Durchschnitt zweier Mengen
       void AddElement(int);              // Hinzufuegen eines int-Wertes
       bool In(int);                       // Ueberpruefen, ob der int-Wert
                                          // im Argument in der Menge enthalten ist
       void Ausgabe(void);                // Ausgabe der Menge auf cout
      private:
       int m_nElemente;                   // Zahl der Elemente der Menge
       int m_Menge[Dim];                  // Feld der Elemente der Menge
    };
    #endif
    

    Beachten Sie, daß die Referenz, welche in den Methoden Vereinigung und Durchschnitt als Ergebnis dem aufrufenden Programm zurückgegeben wird, auf einen auch in diesem Programmteil gültigen Speicherplatz verweisen muß. D.h. die Ergenismenge darf nicht auf dem Stack gespeichert werden, sondern muß mit dem new-Operator im Freispeicher angelegt werden.

    Bitte helft mir!!! 😕



  • wobei?



  • otze schrieb:

    wobei?

    lol, aber genau das frage ich auch... 😃



  • Wobei wir helfen sollen, das frage ich mich allerdings auch.

    Aber mal so am Rande:

    Die Memberfunktionen 'Vereinigung' und 'Durchschnitt' finde ich sind in ihrer
    Deklaration ungluecklich gewaehlt. Angenommen ich habe zwei Mengen und will
    die Vereinigungsmenge bilden:

    A U B

    Dadurch bilde ich ja eine neue Menge und manipuliere nicht A bzw. B. Nun sind
    die beiden Memberfunktionen aber so deklariert, dass man folgendes machen muss:

    int A[] = { 1, 2, 3, 4, 5 },
        B[] = { 6, 7, 8, 9, 0 };
    IntMenge Am(A, 4), Bm(B, 4);
    
    //durchschnittsmenge bilden
    IntMenge &Dm = Am.Vereinigung(Bm);
    

    Da 'Vergeinigung' eine Referenz zurueck gibt, muss es sich ja auch ein konkretes
    Objekt beziehen (welches natuerlich keines sein darf, welches lokal angelegt
    worden ist) und fuer mich kommt da, zumindest aus dem Bauch heraus, nur 'Bm'
    in Frage. Damit haben wir die Menge 'Bm' selbst modifiziert, was doch
    eigentlich nicht im Sinne des Erfinders sein wird, oder verhaspel ich mich hier
    irgendwo?

    Die Definition der beiden Funktionen 'Vereinigung' und 'Durchschnitt' erzeugen
    ja eine neue Menge (eben die Vereinigungsmenge bzw. Durchschnitssmenge von
    gegebenen Mengen) und mir erscheint daher folgende Deklaration sinnvoller:

    IntMenge Vereinigung(const IntMenge&);
    IntMenge Durchschnitt(const IntMenge&);
    

    Falls ich hier quatsch erzaehlt habe, bitte ich um kurze Erklaerung wo mein
    Fehler liegt (ausser das die o. Klasse eben so vorgegeben worden ist :)).

    mfg
    v R



  • Ich danke euch für eure hilfe ich bin aber jetzt schon drauf gekommen.

    😃


Anmelden zum Antworten