C ++ je objektově orientovaný jazyk. Abstrakce dat, polymorfismus, zapouzdření a dědičnost jsou základními kameny OOP. V tomto příspěvku pochopíme, co je dědičnost? Typy dědičnosti v jazyce C ++ a všechny nezbytné koncepty s ním související od nuly. Nakonec se také podíváme na nevýhodu tohoto mocného konceptu a pokusíme se jej vyřešit.
- Co je dědičnost v C ++
- Single dědičnost
- Víceúrovňová dědičnost
- Hierarchická dědičnost
- Vícenásobná dědičnost v C ++
- Hybridní dědičnost v C ++
- Diamantový problém
Co je dědičnost v C ++
Dědičnost je jedním z nejmocnějších a nejpoužívanějších konceptů v C ++ nebo jiném objektově orientovaném jazyce. Pochopení tohoto konceptu vyžaduje malou znalost tříd a předmětů. Pomocí dědičnosti můžeme vytvořit třídu, která se skládá z obecných metod a atributů. Tuto třídu lze zdědit jinými třídami obsahujícími konkrétnější metody.
Tímto způsobem nemusíme psát stále stejné funkce, což šetří čas a zvyšuje čitelnost kódu.
Syntax:
třída derived_class: access_type base_class {// tělo třídy}
Základní třída: Třída, která se skládá ze všech obecných metod a atributů, které lze sdílet jinými třídami pro zvýšení čitelnosti kódu, se nazývá základní třída.
Fibonacciho číslo c ++
Odvozená třída: Třída, která se skládá z konkrétnějších metod a dědí třídu, se nazývá odvozená třída. Odvozená třída může být také základní třídou pro nějakou jinou odvozenou třídu.
Pokud vytvoříme třídu XYZ, s některými atributy a metodami. Nyní bude mít student třídy nějaké další atributy, ale bude zahrnovat také prvky třídy XYZ a totéž platí pro třídu fakulty. Podívejme se na diagram:
Studentská a fakultní třída tedy zdědí z XYZ.
Specifikátor přístupu Pochopili jsme, jak může třída zdědit jinou třídu. Někteří lidé by ale mohli říci, že se jedná o nebezpečnou metodu, protože všechny atributy a metody základní třídy nebo nadřazené třídy jsou sdíleny s podřízenou třídou nebo odvozenou třídou. Například pokud třídu „banka“ zdědí třída „zákazníci“ a „investoři“. Atributy třídy „Banka“, například „heslo úložiště“, další informace týkající se zákazníků a soukromá data, jsou sdíleny s „zákazníky“ a třídou „investory“, což je nebezpečné.
K vyřešení výše uvedeného problému používá C ++ specifikátory přístupu k omezení přístupu atributů základní třídy k odvozené třídě. V C ++ jsou celkem 3 typy specifikátorů přístupu
- Veřejnost
- Soukromé
- Chráněný
Níže uvedená tabulka vám poskytne dobré pochopení toho, k jakému typu dat lze získat přístup pomocí odvozené třídy podle různých specifikátorů přístupu.
Specifikátor přístupu | Veřejné údaje | Soukromá data | Chráněná data |
Soukromé | Nezděděno | Nezděděno | Nezděděno |
Chráněný | Chráněný | Soukromé | Chráněný |
Veřejnost | Veřejnost | Soukromé | Chráněný |
Single dědičnost
Single dědičnost lze považovat za prostou formu vanilky dědictví. V jednoduché dědičnosti dědí jedna třída ze základní třídy.
#include using namespace std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Tento případ dědičnosti se nazývá víceúrovňová dědičnost. Třída mezi první a poslední třídou je také známá jako střední základní třída.Co si myslíte, může poslední třída zdědit členy první třídy? Ano, může #include using namespace std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' <Výstup:
Hodnota a = 10
jak nastavit zatmění pro javu
Hodnota b = 20
Hodnota c = 30
Hodnota d = 50
Hierarchická dědičnost
Určité problémy nelze vyřešit pomocí jedno nebo víceúrovňové dědičnosti. V hierarchické dědičnosti dědí více než 1 třída z jedné základní třídy.
#include using namespace std class College {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }Výstup:
Jsme ve třídě College
Jsme ve třídě College
Vícenásobná dědičnost v C ++
V hierarchické dědičnosti jsme viděli, že jedna základní třída měla více než jednu odvozenou třídu. Ve vícenásobné dědičnosti má jedna odvozená třída více než jednu základní třídu.
#include using namespace std class One {protected: int a public: void getinfoOne (int x) {a = x}} class Two {protected: int b public: void getinfoTwo (int y) {b = y}} class Main: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < V tomto okamžiku dobře rozumíme všem typům dědičnosti používaným v C ++. Ale počkejte, co když chceme použít 2 různé typy dědictví? Je to možné? Ano, je to možné pomocí hybridní dědičnosti. V hybridní dědičnosti kombinujeme 2 různé typy dědičnosti. Například - víceúrovňová a vícenásobná dědičnost, hierarchická a vícenásobná dědičnost atd.#include using namespace std class World {protected: int a public: void getinfoWorld (int x) {a = x}} class Continent: public World {protected: int b public: void getinfoContinent (int y) {b = y}} třída Země {chráněno: int d public: void getinfoCountry (int m) {d = m}} třída Austrálie: veřejný kontinent, public Země {public: void Display () {std :: cout<< 'Value of a = ' <Rozumíme výše uvedenému diagramu, který nám pomůže pochopit diamantový problém. třída B a třída C dědí z třídy A, proto jak třída A, tak třída B mají atributy a metody třídy A. pokud třída D dědí z třídy B i třídy C. třída D bude mít všechny atributy třídy B a třídy C Má také všechny atributy třídy A zděděné od třídy B i třídy C. proto pokud vytvoříme objekt třídy D a zavoláme metodu třídy A. bude vytvořena nejednoznačná situace a kompilátor bude zmaten odkud mělo by to být metoda třídy A, ze třídy B nebo třídy D.
jak vytvořit třídu singleton v javaK vyřešení této nejednoznačnosti používáme koncept zvaný virtuální základní třída. Když vytvoříme základní třídu virtuální základní třídy, zdědí se pouze jedna kopie této třídy bez ohledu na počet existujících cest mezi virtuální základní třídou a odvozenou třídou.
třída A {} třída B: virtuální veřejné A {} třída C: virtuální veřejné A {} třída D: veřejné C, veřejné D {}S tímto se dostáváme na konec tohoto článku Dědičnosti v C ++. Pokud se chcete dozvědět více, podívejte se na Edureka, důvěryhodná online vzdělávací společnost. Školicí a certifikační kurz Edureka Java J2EE a SOA je navržen tak, aby vás vyškolil jak pro základní, tak pro pokročilé koncepty Java, spolu s různými rámci Java, jako je Hibernate & Spring.
Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto blogu a my se vám ozveme co nejdříve.