C ++ Öröklés

Ebben az oktatóanyagban példák segítségével megismerhetjük az öröklődést a C ++ nyelven.

Az öröklés az objektum-orientált programozás egyik legfontosabb jellemzője a C ++ nyelven. Ez lehetővé teszi számunkra, hogy egy meglévő osztályból (alaposztály) új osztályt (származtatott osztályt) hozzunk létre.

A származtatott osztály a tulajdonságokat az alaposztálytól örökölte, és további sajátosságai is lehetnek. Például,

 class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );

Itt az Dogosztály az osztályból származik Animal. Mivel Dogszármazik Animal, a tagjai Animalhozzáférhetőek Dog.

Öröklés C ++ - ban

Figyelje meg a kulcsszó használatát, publicmiközben örökölje a kutyát az állattól.

 class Dog : public Animal (… );

Használhatjuk a privateés protectedhelyett a kulcsszavakat is public. Fogunk tanulni a különbség segítségével private, publicés protectedkésőbb ez a bemutató.

van-egy kapcsolat

Az öröklés egy kapcsolat . Csak akkor használjuk az öröklést, ha a két osztály között van egy kapcsolat .

Íme néhány példa:

  • Az autó jármű.
  • A narancs egy gyümölcs.
  • A sebész orvos.
  • A kutya állat.

1. példa: Egyszerű példa a C ++ öröklődésre

 // C++ program to demonstrate inheritance #include using namespace std; // base class class Animal ( public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) ); // derived class class Dog : public Animal ( public: void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); // Calling member of the derived class dog1.bark(); return 0; )

Kimenet

Tudok enni! Tudok aludni! Ugathatok! Vau vau!!

Itt a dog1 (a származtatott osztály objektuma Dog) hozzáférhet az alaposztály tagjaihoz Animal. Azért van, mert Dogörökölte Animal.

 // Calling members of the Animal class dog1.eat(); dog1.sleep();

C ++ védett tagok

A hozzáférés-módosító protectedkülönösen fontos, ha a C ++ öröklődésről van szó.

A privatetagokhoz hasonlóan a tagok protectedis elérhetetlenek az órán kívül. Ezek azonban származtatott osztályok és barát osztályok / függvények alapján érhetők el .

Szükségünk van protectedtagokra, ha el akarjuk rejteni egy osztály adatait, de mégis azt akarjuk, hogy ezeket az adatokat a származtatott osztályai örököljék.

Ha többet szeretne megtudni a védettről, olvassa el a C ++ Access Modifiers oktatóanyagunkat.

2. példa: C ++ védett tagok

 // C++ program to demonstrate protected members #include #include using namespace std; // base class class Animal ( private: string color; protected: string type; public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) void setColor(string clr) ( color = clr; ) string getColor() ( return color; ) ); // derived class class Dog : public Animal ( public: void setType(string tp) ( type = tp; ) void displayInfo(string c) ( cout << "I am a " << type << endl; cout << "My color is " << c << endl; ) void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); dog1.setColor("black"); // Calling member of the derived class dog1.bark(); dog1.setType("mammal"); // Using getColor() of dog1 as argument // getColor() returns string data dog1.displayInfo(dog1.getColor()); return 0; )

Kimenet

Tudok enni! Tudok aludni! Ugathatok! Vau vau!! Emlős vagyok A színem fekete

Itt a változó típusa protecteda származtatott osztályból elérhető és így elérhető Dog. Láthatjuk ezt, amikor inicializáltuk typeaz Dogosztályban a függvény használatával setType().

Másrészt a privateváltozó szín nem inicializálható Dog.

 class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );

Továbbá, mivel a protectedkulcsszó elrejti az adatokat, nem férhetünk hozzá közvetlenül a típushoz egy objektumból Dogvagy Animalosztályból.

 // Error: member "Animal::type" is inaccessible dog1.type = "mammal";

Hozzáférési módok a C ++ öröklésben

Korábbi oktatóanyagainkban megismertük a C ++ hozzáférési specifikációkat, például nyilvános, privát és védett.

Eddig a publickulcsszót használtuk egy osztály örökléséhez egy korábban létező alaposztálytól. Az osztályok örökléséhez azonban felhasználhatjuk a privateés protectedkulcsszavakat is. Például,

 class Animal ( // code ); class Dog : private Animal ( // code );
 class Cat : protected Animal ( // code );

Az osztályok levezetésének különféle módjai hozzáférési módok . Ezeknek a hozzáférési módoknak a következő hatása van:

  1. public: Ha egy származtatott osztályt deklarálunk publicmódban, akkor az alaposztály tagjait a származtatott osztály ugyanúgy örökölte.
  2. privát: Ebben az esetben az alaposztály összes privatetagja a származtatott osztály tagjává válik .
  3. védett: Az publicalaposztály protectedtagjai a származtatott osztály tagjává válnak .

Az privatealaposztály tagjai mindig privatea levezetett osztályba tartoznak.

Ha többet szeretne megtudni, látogasson el a C ++ nyilvános, privát, védett öröklési oktatóanyagunkra.

Az öröklésben felülbíráló tagfunkció

Tegyük fel, hogy az alaposztálynak és a származtatott osztálynak tagneve és argumentuma azonos.

Ha létrehozunk egy objektumot a származtatott osztályból, és megpróbáljuk elérni azt a tagfüggvényt, akkor a származtatott osztály tagfüggvényét hívjuk meg az alaposztályé helyett.

A származtatott tag tagfüggvénye felülírja az alaposztály tagfüggvényét.

További információ a C ++ funkció felülbírálásáról.

Ajánlott olvasmány: C ++ többszörös öröklés

érdekes cikkek...