Работа с наследяване в C ++

В този урок ще говорим за наследяване в C ++, много интересна тема, нека я разгледаме чрез прост пример. За хората, които са на Windows, можете да изтеглите IDE за програмиране, това ще ви помогне да компилирате и стартирате програмите, оставяме връзката по -долу:

DEVC ++

Тук ще използваме Linux, по -специално Ubuntu, който вече има компилатор за C ++. Езикът на C ++, както вероятно всички знаят, позволява множествено наследяване, за разлика от Java, което позволява само просто наследяване и ако искаме нещо подобно, трябва да изтеглим интерфейси, в крайна сметка той е по -малко податлив на грешки.

Основният пример, който ще покажем тук, за да видим наследяване в C ++, е прост, няма да влизаме в множествено наследяване, освен в края, за да покажем грешка, с която можем да бъдем засегнати.

1. Просто наследяване в C ++


За да започнем първия пример, просто наследяване, ще имаме клас Животински, който ще бъде нашият основен клас или родител, и 2 класа, които ще наследяват, Куче който няма да има код и Котка което ще добави нов параметър към родителския клас. Нека да видим кода (той е кратък):
 #include using namespace std; клас Animal {private: int age; обществено: Животно (int a = 1) {възраст = a; }; int getAge () const {възрастова възраст;} void setAge (int a = 9) {age = a; }}; клас Куче: обществено животно {}; клас Котка: обществено животно {частно: плувка тегло; публично: Cat (int a = 2, float w = 3.2): Animal (a) {тегло = w; } float getWeight () const {връщане на теглото;}}; int main () {Dog mastin; cout << "____DOG____" << endl; cout << "Преди:" << mastin.getAge () << endl; mastin.setAge (2); cout << "След:" << mastin.getAge () << endl; Котешко мяукане (3, 4.1); cout << "____CAT____" << endl; cout << meow.getAge () << "" << meow.getWeight () << endl; } 
Предполагаме, че вече знаете някои C ++, за да продължите да разглеждате проблемите с наследяването и затова частите от функциите или публичните и частните части, които няма да обясняваме. За да наследим от клас, имаме следния синтаксис:
 клас дъщерни_клас: публичен родителски_клас
Така че в нашия пример за създаване на класа Куче ние сме използвали:
 клас Куче: обществено животно
Показва, че Куче наследява от Animal, всичко, което класът Animal има в своите публични или защитени блокове, можем да го използваме, но ако използваме частния блок, ще получим грешка. Добър клас Куче той е празен, така че няма големи затруднения.

Ако отидем на час Котка, имаме същата декларация на клас, както преди, освен това виждаме, че добавя нова променлива тегло, тази променлива няма нито него, нито класа Животински, нито едното Куче. Тук в конструктора на класа сме нарекли конструктора на родителския клас, като по този начин предаваме данните за променливата възраст, и също така попълваме променливата тегло.

ЗабележкаМожете да видите, че параметрите, които предаваме на функциите, могат да имат стойност по подразбиране.

В главен създаваме обект от класа Куче, оставяме възрастта по подразбиране и я показваме, след което използваме функцията setAge да промените възрастта и да я покажете отново. Накрая създаваме обект от класа Котка, и този път не оставяме променливите да имат стойност по подразбиране и им ги предаваме при създаването на обекта и за да не се променят ние ги показваме.

Ако искаме стартирайте този код в терминал на Linux с g ++, правим следното:

 g ++ -o тест tesc.gcc
И да го стартирате много лесно:
 ./тест
Ще покажем улавяне с компилирането и изпълнението на малкия код:

2. Множествено наследяване в C ++


За да ги видите опасности от многократно наследяване ще оставим много малък код:
 #include using namespace std; class Animal {public: void walk () {cout << "Walking in Animal" << endl; }}; class Mammal {public: void walk () {cout << "Walking in Mammal" << endl; }}; клас Куче: обществено животно, обществено бозайник {}; int main () {Куче куче; dog.walk (); } 
Ние виждаме това Куче наследява от Животински Y Бозайник, и двата класа имат една и съща функция да вървиш, ако използвам нормалната функция, както е в кода:
 dog.walk ()
И ние компилираме получаваме следната грешка:

За да го разрешим, можем да използваме следния синтаксис, за да извикаме функцията Животински:

 куче.Животно :: разходка ();
или да използвате класа Бозайник:
 куче.Mamifero :: walk ();
И разбира се, най -доброто решение е да нямаме 2 функции със същото име, ако ще използваме множествено наследяване, в тази програма е много лесно да се реши, но в голяма може да се превърне в главоболие.

Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка
wave wave wave wave wave