was macht "proteced" ?



  • Hi,

    ich verstehe die verwendung von "protected" nicht ganz angenommen ich habe eine Basisklasse und eine andere Klasse die diese Klasse beerbt:

    class Saeugetier
    {
    public:
    	Saeugetier(){};
    	~Saeugetier() {};
    	void setAge(int a){ alter = a; };
    	int getAge(){ return alter; };
    protected:
    	int alter;
    };
    
    class Hund : public Saeugetier
    {
    public:
    	Hund(){};
    	~Hund(){};
    };
    

    was bewirkt das protected nun genau hier kann ich anstelle von protected nicht genausogut private schreiben 😕 😕 😕



  • Hund hat jetzt private-Zugriff auf alter. Wäre alter private deklariert,
    hätte Hund gar keinen Zugriff auf diese Variable.



  • nein, wenn die das alter protected ist, dann kann auf das alter auch von Hund auch zugegriffen werden. bei private funktioniert das nicht.



  • ha, schneller 🙂



  • protected bedeutet, dass das attribut geschützt ist, also andere objekte oder funktionen nicht einfach darauf zugreifen dürfen.
    private heisst ganz einfach, dass dieses attribut nur für diese klasse ist. es gilt aber auch das was für protected gilt.



  • Wie kann man das an einem Beispiel sehen was protected genau bewirkt angenommen ich benutze in der Basisklasse nun private und erstelle dieses Hauptprogramm:

    int main()
    {
    	Saeugetier test1;
    	test1.setAge(10);
    
    	Hund test2;
    	test2.setAge(20);
        return 0;
    
    }
    

    und wenn ich nun in der Basisklasse protected benutze ändert sich ja nichts.



  • class Hund : public Saeugetier 
    { 
    public: 
        Hund(){}; 
        ~Hund(){};
        void printHundeAge() { std::cout << alter << std::endl; };
    };
    

    Da streikt der Compiler, wenn alter in Saegetier private ist, wenn
    es protected ist, geht es.



  • @0x0000F:

    setAge stammt ja von Saeugetier und Saeugetier hat das recht auf alter zuzugreifen. Deswegen macht es keinen Unterschied. Würdest du alerdings in Hund versuchen setAge oder irgendetwas, was alter verändert zu implementieren, würde das mit privat nicht gehen. Da du aber eh öffentliche zugriffsmethoden (setAge, getAge) hast ist das egal. Zugreifen kannst du so oder so.
    Vom oo-Standpunkt aus ist es auch schlecht setAge zu imlementieren, da man das alter eines Säugetiers nunmal nicht einfach ändern kann. Sowas wie "Jetzt bist du mal 30. Och ne das ist langweilig du best jetzt doch leiber mal 3." ist nicht möglich. Etwas wie geburtstag oder vergleichbares wäre da wesentlich sinnvoller.



  • Jo cool glaube hab das jetzt verstanden nochmal danke an alle 🙂 🙂

    @Helium thx fuer den letzten Hinweis zum oo-Standpunkt werde ich mir merken 🙂 🙂


Anmelden zum Antworten