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 Dog
osztály az osztályból származik Animal
. Mivel Dog
származik Animal
, a tagjai Animal
hozzáférhetőek Dog
.

Figyelje meg a kulcsszó használatát, public
miközben örökölje a kutyát az állattól.
class Dog : public Animal (… );
Használhatjuk a private
és protected
helyett a kulcsszavakat is public
. Fogunk tanulni a különbség segítségével private
, public
és protected
ké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ó protected
különösen fontos, ha a C ++ öröklődésről van szó.
A private
tagokhoz hasonlóan a tagok protected
is 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 protected
tagokra, 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 protected
a származtatott osztályból elérhető és így elérhető Dog
. Láthatjuk ezt, amikor inicializáltuk type
az Dog
osztályban a függvény használatával setType()
.
Másrészt a private
vá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 protected
kulcsszó elrejti az adatokat, nem férhetünk hozzá közvetlenül a típushoz egy objektumból Dog
vagy Animal
osztá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 public
kulcsszó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 protected
kulcsszavakat 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:
- public: Ha egy származtatott osztályt deklarálunk
public
módban, akkor az alaposztály tagjait a származtatott osztály ugyanúgy örökölte. - privát: Ebben az esetben az alaposztály összes
private
tagja a származtatott osztály tagjává válik . - védett: Az
public
alaposztályprotected
tagjai a származtatott osztály tagjává válnak .
Az private
alaposztály tagjai mindig private
a 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