Све што треба да знате о наслеђивању на Ц ++



Овај чланак ће вам пружити детаљно и свеобухватно знање о наслеђивању у Ц ++-у, разним врстама и начину примене.

Ц ++ је објектно оријентисани језик. Апстракција података, полиморфизам, инкапсулација и наслеђивање су темељи ООП-а. У овом посту ћемо разумети шта је наследство? Врсте наслеђа у Ц ++-у и сви потребни концепти повезани с њим од нуле. На крају ћемо размотрити и недостатак овог моћног концепта и покушати да га решимо.

Шта је наслеђивање у језику Ц ++

Наслеђивање је један од најмоћнијих и најчешће коришћених концепата на Ц ++ или било ком другом објектно оријентисаном језику. Разумевање овог концепта захтева мало познавања класа и предмета. Користећи наслеђивање можемо створити класу која се састоји од општих метода и атрибута. Ову класу могу наследити друге класе које садрже специфичније методе.





Наслеђивање у Ц ++

јава како завршити програм

Радећи ово не морамо поново и изнова писати исте функције, што штеди време и повећава читљивост кода.



Синтакса:

класа изведена_класа: приступни_тип основна_класа {// тело класе}

Основна класа: Класа која се састоји од свих општих метода и атрибута које друге класе могу делити ради повећања читљивости кода назива се основна класа.

Изведена класа: Класа која се састоји од специфичнијих метода и наслеђује класу назива се изведена класа. Изведена класа такође може бити основна класа за неку другу изведену класу.



Ако креирамо класу КСИЗ, са неким атрибутима и методама. Сада ће студент са разредом имати неке друге атрибуте, али ће такође укључивати елементе КСИЗ класе, а исто важи и за наставу на факултету. Погледајмо дијаграм:

Дакле, разред студената и факултета наследиће од КСИЗ.

Спецификатор приступа Схватили смо како класа може наследити другу класу. Али неки људи могу рећи да је то небезбедна метода, јер се сви атрибути и методе основне или родитељске класе деле са подређеном или изведеном класом. На пример, ако класу „банка“ наслеђују класа „купци“ и „инвеститори“. Атрибути класе „банка“, као што је „лозинка трезора“, друге информације повезане са клијентима и приватни подаци деле се са „купцима“ и класом „инвеститори“, што није безбедно.

Да би решио горњи проблем, Ц ++ користи спецификаторе приступа за ограничавање приступа атрибутима основне класе изведеној класи. У Ц ++-у постоје укупно 3 врсте спецификатора приступа

  1. Јавно
  2. Приватни
  3. Заштићено

Табела у наставку ће вам пружити добро разумевање којој врсти података може приступити изведена класа према различитим спецификаторима приступа.

Спецификатор приступа Јавни подаци Приватни подаци Заштићени подаци
Приватни Није наслеђеноНије наслеђеноНије наслеђено
Заштићено Заштићено Приватни Заштићено
Јавно Јавно Приватни Заштићено

Наслеђивање појединачно

Једно наслеђе може се сматрати обичним ванилијским обликом наследства. У појединачном наслеђивању, појединачна класа наслеђује из основне класе.

#инцлуде усинг спаце намес стд цласс Траин {инт Нумберофвхеелс инт Нумберофцоацхес публиц: воид Траининфо (инт н, инт м) {Нумберофвхеелс = н Нумберофцоацхес = м} воид сховинфо () {цоут<Овај случај наслеђивања назива се наслеђивање на више нивоа. Класа између прве и последње класе позната је и као средња основна класа.Шта мислите, може ли последња класа наследити чланове прве класе? Да, може

#инцлуде усинг спаце намес стд цласс Фирст {протецтед: инт а публиц: воид гетинфофирст (инт к) {а = к} воид сховинфофирст () {стд :: цоут<< 'Value of a = ' < 

Излаз:

Вредност а = 10

Вредност б = 20

Вредност ц = 30

Вредност д = 50

Хијерархијско наслеђивање

Одређени проблеми се не могу решити уз помоћ наслеђа једног или више нивоа. У хијерархијском наслеђивању, више од 1 класе наслеђује из једне основне класе.

#инцлуде усинг спаце намес стд цласс Цоллеге {публиц: Цоллеге () {цоут<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

Излаз:

Ми смо на часу колеџа

Ми смо на часу колеџа

Вишеструко наслеђивање у Ц ++

Видели смо у хијерархијском наслеђивању да је једна основна класа имала више изведених класа. У вишеструком наслеђивању једна изведена класа има више од једне основне класе.

#инцлуде усинг спаце намес стд цласс Оне {протецтед: инт а публиц: воид гетинфоОне (инт к) {а = к}} цласс Тво {протецтед: инт б публиц: воид гетинфоТво (инт и) {б = и}} цласс Маин: јавни Један, јавни Две {публиц: воид Дисплаи () {стд :: цоут<< 'Value of a = ' < У овом тренутку добро разумемо све врсте наслеђивања коришћене у Ц ++. Али, сачекајте шта ако желимо да користимо 2 различите врсте наследства? Да ли је могуће? Да, могуће је уз помоћ хибридног наслеђивања. У хибридном наслеђивању комбинујемо 2 различите врсте наследства. На пример- Вишеразинско и вишеструко наслеђивање, Хијерархијско и вишеструко наследство итд.

#инцлуде усинг спаце намес стд цласс Ворлд {протецтед: инт а публиц: воид гетинфоВорлд (инт к) {а = к}} цласс Цонтинент: публиц Ворлд {протецтед: инт б публиц: воид гетинфоЦонтинент (инт и) {б = и}} цласс Држава {заштићен: инт д публиц: воид гетинфоЦоунтри (инт м) {д = м}} цласс Аустралиа: публиц Цонтинент, публиц Цоунтри {публиц: воид Дисплаи () {стд :: цоут<< 'Value of a = ' < 

Хајде да разумемо горњи дијаграм који ће нам помоћи у разумевању проблема са дијамантима. класа Б и класа Ц наслеђују класу А, стога класа А и класа Б имају атрибуте и методе класе А. ако класа Д наслеђује класу Б као и класу Ц. класа Д ће имати све атрибуте класе Б и класе Ц Такође има све атрибуте класе А наслеђене из класе Б, као и класе Ц. стога, ако направимо објекат класе Д и позовемо метод класе А., створиће се двосмислена ситуација и преводилац ће бити збуњен одакле треба да користи класу А, из класе Б или класе Д.

Да бисмо решили ову двосмисленост користимо концепт који се назива виртуелна основна класа. Када основну класу направимо виртуалном базном класом, насљеђује се само једна копија те класе, без обзира на број постојећих путања између виртуалне базне класе и изведене класе.

класа А {} класа Б: виртуелна јавна А {} класа Ц: виртуелна јавна А {} класа Д: јавна Ц, јавна Д {}

Овим смо дошли до краја овог чланка Наслеђивање у Ц ++. Ако желите да сазнате више, погледајте Едурека, поуздана компанија за учење на мрежи. Едурекин курс за обуку и сертификацију Јава Ј2ЕЕ и СОА осмишљен је тако да вас оспособи за основне и напредне Јава концепте заједно са разним Јава оквирима попут Хибернате & Спринг.

Имате питање за нас? Молимо вас да га спомињете у одељку за коментаре овог блога и јавићемо вам се што је пре могуће.