Klassenüberschneidung mit Ableitung



  • Hallo,
    ich habe ein Problem mit dem Umgang mit Klassen.
    Ich brauche eine "Mutterklasse" Tiere und abgeleitete Klassen Hund, Katze.
    Nun wollte ich die Klassen so aufbauen:

    class Tiere{
       private: void erstelleTier(int Art);
                Katze katzen[255];
                Hund  hunde[255];
                ...
    
       protected: int alter;
                  ...
    };
    
    class Hund : public Tiere{
     ....
    };
    class Katze : public Tiere{
      ....
    };
    

    was muss ich machen, damit in der Klasse Tiere die abgeleiteten Klassen Hund und Katze bekannt sind.



  • Machts nicht mehr sinn einfach eine oberklasse tier zu haben von der hund und katze erben und eine extraklasse tiere, in der du deine ganzen objekte speicherst?



  • Naja, mein Hauptproblem ist, das ich die Vorgabe habe das ich Katze und Hund von Tiere ableiten soll Und in Tier soll alles gespeichert werde, was bei beiden gleich ist.



  • class Tier
    {
    public;
        Tier();
        virtual ~Tier();
    protected:
        int alter;
    };
    
    class Hund : public Tier
    {
    //...
    };
    
    class Katze : public Tier
    {
    //...
    };
    
    class Tiere
    {
    public:
        Tiere(int anzahl)
        {
            tiere = new Tier[anzahl];
            // stell was mit den tieren an
        }
    private:
        Tier *tiere;
    };
    

    macht das was du gerade gesagt hat, im Tier ist alles was "beide" gleich haben.. was das ist musst du dir natürlich ausdenken



  • Kann das sein, dass du keine Ahnung hast, was du machen sollst???

    Schrecklich diese Leute...



  • Net_Hans schrieb:

    Naja, mein Hauptproblem ist, das ich die Vorgabe habe das ich Katze und Hund von Tiere ableiten soll Und in Tier soll alles gespeichert werde, was bei beiden gleich ist.

    Und deshalb musst du in Tiere ein Array für Hunde und eines für Katzen machen? Du bist dir wohl nicht bewusst, dass wenn du das so machst, jeder Hund und jede Katze wiederum sowohl ein Hunde- als auch ein Katzenarray besitzt, was ziemliche Verschwendung (und nebenbei unübersichtlich) ist. Du könntest die Arrays ausserhalb einer Klasse (z.B. in main() oder global) deklarieren. Wozu brauchst du eigentlich erstelleTier(int art)? Um zu entscheiden, ob es ein Hund oder eine Katze wird? Das ist nicht mehr nötig, wenn du direkt Instanzen der abgeleiteten Klassen erstellst.
    Etwa so sähe das aus (nur eine Möglichkeit):

    class Tiere
    {
       // ...
       protected: 
           int alter;
           // andere Eigenschaften eines Tiers
    };
    
    class Hund : public Tiere
    {
       // ....
    };
    class Katze : public Tiere
    {
       // ....
    };
    
    int main()
    {
        Katze Katzen[255];
        Hund Hunde[255];
        // ...
    }
    

    Kenner der Nichtskönner schrieb:

    Kann das sein, dass du keine Ahnung hast, was du machen sollst???

    Schrecklich diese Leute...

    Nicht schrecklicher als jene, die andere sinnlos kritisieren, ohne ihnen zu helfen... 🙄



  • Net_Hans schrieb:

    Naja, mein Hauptproblem ist, das ich die Vorgabe habe das ich Katze und Hund von Tiere ableiten soll Und in Tier soll alles gespeichert werde, was bei beiden gleich ist.

    Was bringt dir dann das da:

    Net_Hans schrieb:

    Katze katzen[255];
    Hund hunde[255];

    Ist das etwas was bei beiden gleich ist oder wieso brauchst du das in der Klasse?

    Sollst du vielleicht nicht einfach eine Klasse Tier schreiben, von der die Klassen Hund und Katze erben?
    In Klasse Tier gibt es dann funktionen, wie laufen, essen, schlafen, ...

    Net_Hans schrieb:

    was muss ich machen, damit in der Klasse Tiere die abgeleiteten Klassen Hund und Katze bekannt sind.

    Forward Deklaration?


Anmelden zum Antworten