V tomto tutoriálu budeme mluvit o dědičnost v C ++, velmi zajímavé téma, pojďme se na to podívat na jednoduchém příkladu. Pro lidi, kteří jsou ve Windows, si můžete stáhnout IDE do programu, pomůže vám to s kompilací a spuštěním programů, ponecháme odkaz níže:
DEVC ++
Zde použijeme Linux, konkrétně Ubuntu, který již má kompilátor pro C ++. Jazyk C ++, jak asi každý ví, umožňuje vícenásobnou dědičnost, na rozdíl od Javy, která umožňuje pouze jednoduchou dědičnost a pokud chceme něco podobného, musíme tahat rozhraní, nakonec je méně náchylný k chybám.
Hlavní příklad, který zde ukážeme, abychom viděli dědičnost v C ++, je jednoduchý, nechystáme se dostat do vícenásobné dědičnosti, kromě toho, že na konci ukážeme chybu, kterou můžeme být ovlivněni.
1. Jednoduchá dědičnost v C ++
Chcete -li začít s prvním příkladem, jednoduchou dědičností, budeme mít třídu Zvíře, což bude naše základní třída nebo rodič, a 2 třídy, které budou dědit, Pes který nebude mít žádný kód a Kočka který přidá nový parametr do nadřazené třídy. Podívejme se na kód (je krátký):
#include using namespace std; třída Zvíře {soukromé: int věk; public: Animal (int a = 1) {věk = a; }; int getAge () const {return age;} void setAge (int a = 9) {age = a; }}; třída Pes: veřejné zvíře {}; třída Cat: public Animal {private: float weight; public: Cat (int a = 2, float w = 3.2): Animal (a) {weight = w; } float getWeight () const {návratná hmotnost;}}; int main () {Psí mastin; cout << "____DOG____" << endl; cout << "Před:" << mastin.getAge () << endl; mastin.setAge (2); cout << "After:" << mastin.getAge () << endl; Mňoukání koček (3, 4,1); cout << "____CAT____" << endl; cout << meow.getAge () << "" << meow.getWeight () << endl; }Předpokládáme, že již znáte některé C ++, abyste mohli vidět problémy s dědičností, a proto části funkcí nebo veřejné a soukromé části nebudeme vysvětlovat. Pro dědění ze třídy máme následující syntaxi:
třída dcera_třída: veřejná nadřazená_třídaV našem příkladu tedy vytvořte třídu Pes použili jsme:
třída Pes: veřejné ZvířeOznačuje to Pes dědí od Animal, vše, co má třída Animal ve svých veřejných nebo chráněných blocích, můžeme použít, ale pokud použijeme soukromý blok, dojde k chybě. Dobrá třída Pes je prázdný, takže nemá žádné větší potíže.
Pokud půjdeme do třídy Kočka, máme stejnou deklaraci třídy jako dříve, kromě toho vidíme, že přidává novou proměnnou hmotnost, tato proměnná ji nemá ani třídu Zvíře, ani Pes. Zde jsme v konstruktoru třídy zavolali konstruktor nadřazené třídy, takže předáváme data pro proměnnou stáří, a také vyplníme proměnnou hmotnost.
PoznámkaMůžete vidět, že parametry, které předáváme funkcím, mohou mít výchozí hodnotu.
V hlavní vytvoříme objekt třídy Pes, ve výchozím nastavení ponecháme věk, zobrazíme jej a poté použijeme funkci setAge změnit věk a znovu to ukázat. Nakonec vytvoříme objekt třídy Kočka, a tentokrát nenecháme proměnné mít výchozí hodnotu a předáme jim je při vytváření objektu, a aby se neměnily, ukážeme je.
Pokud chceme spusťte tento kód v linuxovém terminálu pomocí g ++, děláme následující:
g ++ -o test tesc.gccA spustit to velmi snadno:
./testUkážeme zachycení s kompilací a spuštěním malého kódu:
2. Vícenásobná dědičnost v C ++
Abychom je viděli nebezpečí vícenásobné dědičnosti ponecháme velmi malý kód:
#include using namespace std; třída Animal {public: void walk () {cout << "Walking in Animal" << endl; }}; třída Mammal {public: void walk () {cout << "Walking in Mammal" << endl; }}; třída Pes: veřejný Zvíře, veřejný Savec {}; int main () {Psí pes; dog.walk (); }Vidíme to Pes dědí z Zvíře Y Savec, a obě třídy mají stejnou funkci na procházkuPokud použiji normální funkci jako v kódu:
dog.walk ()A při kompilaci dostaneme následující chybu:
K vyřešení můžeme použít následující syntaxi k volání funkce Zvíře:
pes. Zvíře :: procházka ();nebo použít třídu Savec:
pes.Mamifero :: procházka ();A samozřejmě nejlepším řešením je nemít 2 funkce se stejným názvem, pokud se chystáme využít vícenásobnou dědičnost, v tomto programu je to velmi snadné vyřešit, ale ve velké z toho může být bolest hlavy. Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod