oberklasse schaffen??



  • Also ich habe folgende 4 Klassen

    [code]
    class B_Gebaeude
    {
    protected:
    Adresse adr;
    long Bueroflaeche;
    int Anz_Etagen;
    double qm_Preis;
    public:
    void melden();
    void Technische_Daten();
    B_Gebaeude();
    ~B_Gebaeude();

    };

    class Grundstueck
    {
    protected:
    Adresse adr;
    long Flaeche;
    double qm_Preis;
    public:
    void melden();
    void Technische_Daten();
    Grundstueck();
    ~Grundstueck();
    };

    class Hotel
    {
    protected:
    char Name[30];
    Adresse adr;
    long Bettenzahl;
    public:
    void melden();
    void Technische_Daten();
    Hotel();
    ~Hotel();

    };

    class W_Gebaeude
    {
    protected:
    Adresse adr;
    long Umbauter_Raum;
    long Wohnflaeche;
    long Grundflaeche;
    int Anz_Etagen;
    double Preis;
    public:
    void melden();
    void Technische_Daten();
    W_Gebaeude();
    ~W_Gebaeude();
    };[code]

    und dafür muss ich ne Oberklasse Objekt schaffen und durch dynamisches binden bei einem kompletten Durchlauf durch meine Liste alle Objekt ausgegeben werden.

    Frage is nu wie und was muss ich in meine Oberklasse reinschreiben.



  • HIIIIIILFEEEEEE!!!!!!!!!

    kann mir irgendjemand bitte helfen?????



  • Hallo,

    hier ein kleines Beispiel für Polymorphie:

    #include <iostream>
    #define MAX 4
    
    using namespace std;
    
    class Kunde
    {
    public:
    	virtual print()
    	{
    		cout << "Kunde" << endl;
    	}
    };
    
    class AuslandsKunde : public Kunde
    {
    public:
    	virtual print()
    	{
    		cout << "AuslandsKunde" << endl;
    	}
    };
    
    int main()
    {
    
    Kunde **p = new Kunde*[MAX];
    
    AuslandsKunde *ausland  = new AuslandsKunde();
    Kunde         *einKunde = ausland;             // print der Klasse
    											   // AuslandsKunde	
    p[0] = ausland;
    p[1] = einKunde;
    p[2] = new Kunde();
    p[3] = new AuslandsKunde(); 
    
    for(int i = 0; i < MAX; i++)
    {
    	(*p[i]).print();
    }
    
    return 0;
    
    }
    

    HIIIIIILFEEEEEE!!!!!!!!!

    Keine Panik!

    Schau dir mal das Beispiel an..

    MfG



  • überlege dir was deine verschiedenen Klassen denn so an gemeinsamen Attributen haben, dh welches Attribut kommt überall vor, das wird ein Attr der Basisklasse.



  • jum schrieb:

    HIIIIIILFEEEEEE!!!!!!!!!

    kann mir irgendjemand bitte helfen?????

    Hm, is doch ganz einfach:
    Du packst alle Gemeinsamkeiten deiner 4 Klassen (Adresse z.b.) in die Oberklasse Objekt. Zusätzlich machst du noch die Methoden, die all deine Objekte haben (melden und technische_Daten), sowie den Destruktor virtual.
    In all deinen 4 Subklassen überschreibst du dann entsprechen die virtuellen Methoden.

    Den "kompletten Durchlauf mit dynamischen Binden" kriegste dann in z.B. so:

    Objekt **o = new Objekt*[3];
    o[0] = new B_Gebaeude;
    o[1] = new Grundstueck;
    o[1] = new Hotel;
    for(int i=0; i<3; i++)
       o[i]->melden();
    


  • Bastel dir ne Oberklasse mit sämtlichen Eigenschaften (sprich: Membervariablen) und Methoden (sprich: Elementfunktionen) enthält, die in allen später davon abgeleiteten Klassen enthalten sind.
    [cpp]
    class Bau_objekt
    {
    Bau_objekt(); //Konstruktor muss nicht
    virtual ~Bau_objekt(); //virtueller Destruktor MUSS
    .
    .
    .
    };
    [/cpp]
    Sachen, die in allen abgeleiteten Klassen gleich sind kannst Du schon hier implementieren. Wenn Du eine Klasse ableitest, sieht das übrigens so aus:
    [cpp]
    class W_Gebaeude : public Bau_objekt
    {
    W_Gebaeude(); //Um Wohngebäude-spezifische Sachen zu initialisieren
    virtual ~W_Gebaeude(); //Muss nicht virtuell sein, sollte aber, um später weitere Klassen ableiten zu können
    .
    .
    .
    };
    [/cpp]

    Die Liste mit allen Bau-Objekten erstellst Du analog zu EdiRitters Beispiel.
    Kleine Anmerkung noch dazu: In der Schleife zum Ausgeben kann man einfacher (und sicherer, weil keine Operatorreihenfolge beachtet werden muss) schreiben

    p[i]->print();
    

    Das wars soweit... ist alles gar nicht so schwer 😉



  • ok vielen Dank jungs das hat mir schon etwas geholfen. Bin das jetzt erst mal so angegangen



  • ok so läufts und wieder was gelernt 🙂 🙂
    ein kleines prob hät ich da noch 🙄 🙄

    und zwar muss ich mittels Iterator bei enme durchlauf die ganze Liste ausgeben.
    Hab es bis jetzt soweit:

    class L_Iter
    {
    private:
    Liste &L;
    int cursor;
    public:
    L_Iter(Liste &B_List):L(B_List)
    {
    reset();
    }
    void reset()
    {
    cursor=0;
    }
    }

    weiter komm ich nicht. jemand einen tip einen klitze kleinen wäre schon nett.



  • jum schrieb:

    ok so läufts und wieder was gelernt 🙂 🙂
    ein kleines prob hät ich da noch 🙄 🙄

    und zwar muss ich mittels Iterator bei enme durchlauf die ganze Liste ausgeben.
    Hab es bis jetzt soweit:

    class L_Iter
    {
    private:
    Liste &L;
    int cursor;
    public:
    L_Iter(Liste &B_List):L(B_List)
    {
    reset();
    }
    void reset()
    {
    cursor=0;
    }
    }

    weiter komm ich nicht. jemand einen tip einen klitze kleinen wäre schon nett.

    http://www.google.de/ 😉


Anmelden zum Antworten