Наследяване на C ++

C Inheritance



Наследяването е много важна характеристика на обектно-ориентираното програмиране. Тя позволява на програмиста да извлече клас от съществуващ клас. Това е много полезно, особено в голям сложен проект, тъй като позволява на програмиста да използва повторно кода.

В тази статия ще обсъдим концепцията за наследяване в програмирането на C ++. Ще обясним концепцията за функцията приятел в C ++ с работни примери.







Защо наследяване?

Наследяването позволява създаването на нов клас или производен клас от друг клас или основен клас. Производният клас или дъщерният клас ще имат всички функции на родителския клас или базовия клас. Можем да използваме повторно кода с помощта на наследяване.



Вид на наследяване

Има различни видове наследяване:



  1. Просто/единично наследяване
  2. Йерархично наследяване
  3. Многостепенно наследяване
  4. Множествено наследяване

В тази статия ще разгледаме само просто/единично наследяване.





Пример 1:

Нека сега разгледаме примерна програма, за да разберем концепцията за наследяване в C ++. Дефинирахме основен клас и след това изведохме друг клас от него. Следователно, извлеченият клас ще има функциите (членове и функции) от базовия клас.

#включва

използвайки пространство за имена std;

клас Base_Class
{
обществен:
inti;
невалидендисплей()
{
цена<< „Показване на базовия клас“ <<i<<endl;
}

};

клас Derived_Class:публичен Base_Class
{
обществен:
невалиденшоу()
{
цена<< „Шоу на производен клас“ <<endl;
}
};

intглавен()
{
Derived_Class dc;
dc.i = 100;
dc.дисплей();
dc.шоу();

връщане 0;
}



Пример 2:

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

Както можете да видите по -долу, ние сме дефинирали два конструктора на основен клас и три конструктора на производен клас. Можете ясно да забележите от изхода по -долу, че конструкторът на базовия клас се извиква първо преди конструктора на извлечения клас.

#включва
използвайки пространство за имена std;

клас Base_Class
{
обществен:
Base_Class()
{
цена<< 'Base_Class - без параметри' <<endl;
}
Base_Class(intх)
{
цена<< 'Base_Class - Параметри:' <<х<<endl;
}
};

клас Derived_Class:публичен Base_Class
{
обществен:
Derived_Class()
{
цена<< 'Derived_Class - Няма параметри' <<endl;
}
Derived_Class(intи)
{
цена<< 'Derived_Class - Параметри:' <<и<<endl;
}
Derived_Class(intх,intи):Base_Class(х)
{
цена<< 'Парам на Derived_Class:' <<и<<endl;
}
};

intглавен()
{
Производен_клас d(7,19);
}

Пример 3:

В този пример ще видим как могат да се използват обекти на производен клас.

Както можете да видите, има дефинирани два класа: Rectangle_Class и Cube_Class. Rectangle_Class е базовият клас, от който се извлича производният клас, т.е. Cube_Class. Следователно ние наследяваме функциите от Rectangle_Class до Cube_Class.

Също така можете да забележите, че наследяваме Cube_Class с публичния контрол на достъпа. Това означава, че производният клас има достъп до всички не частни членове на базовия клас.

Ние сме декларирали обект на производен клас и след това извикваме методите от базовия клас, т.е. setLength () и setBreadth ().

#включва

използвайки пространство за имена std;

клас Rectangle_Class
{
частни:
intдължина;
intширочина;
обществен:
Rectangle_Class();
Rectangle_Class(intна,intб);
Rectangle_Class(Rectangle_Class&r);
intgetLength()
{
връщанедължина;
}
intgetBreadth()
{
връщанеширочина;
}
невалиденsetLength(intна);
невалиденsetBreadth(intб);
int■ площ();
};

клас Cube_Class:обществен Rectangle_Class
{
частни:
intвисочина;
обществен:
Cube_Class(intз)
{
височина=з;
}
intgetHeight()
{
връщаневисочина;
}
невалиденsetHeight(intз)
{
височина=з;
}
intсила на звука()
{
връщанеgetLength()*getBreadth()*височина;
}
};


Rectangle_Class::Rectangle_Class()
{
дължина=1;
широчина=1;
}
Rectangle_Class::Rectangle_Class(intна,intб)
{
дължина=на;
широчина=б;
}
Rectangle_Class::Rectangle_Class(Rectangle_Class&r)
{
дължина=r.дължина;
широчина=r.широчина;
}
невалиденRectangle_Class::setLength(intна)
{
дължина=на;
}
невалиденRectangle_Class::setBreadth(intб)
{
широчина=б;
}
intRectangle_Class::■ площ()
{
връщанедължина*широчина;
}

intглавен()
{
Cube_Class c(8);
° С.setLength(12);
° С.setBreadth(9);
цена<<'Обемът е'<<° С.сила на звука()<<endl;
}

Заключение:

В тази статия обясних концепцията за наследяване в C ++ . C ++ поддържа различни типове наследяване, включително множествено наследяване (т.е. наследяване на функции от множество базов клас или родителски клас). Въпреки това, за да бъде по -лесно, тук съм разгледал само единично наследяване. Показах три работни примера, за да обясня как можем да използваме наследяване в програмирането на C ++ и да използваме повторно кода. Освен това, това е много полезна функция на C ++.