У овом водичу ћемо говорити о наслеђивање у Ц ++, веома занимљива тема, погледајмо то кроз једноставан пример. За људе који су на Виндовс -у, можете преузети ИДЕ за програмирање, помоћи ће вам при састављању и покретању програма, остављамо везу испод:
ДЕВЦ ++
Овде ћемо користити Линук, посебно Убунту, који већ има компајлер за Ц ++. Ц ++ језик, као што вероватно сви знају, дозвољава вишеструко наслеђивање, за разлику од Јаве, која дозвољава само једноставно наслеђивање, а ако желимо нешто слично морамо повући интерфејсе, на крају је мање подложан грешкама.
Главни пример који ћемо овде приказати да бисмо видели наслеђивање у Ц ++ је једноставан, нећемо улазити у више наслеђивања, осим на крају да прикажемо грешку са којом можемо бити погођени.
1. Једноставно наслеђивање у Ц ++
За почетак првог примера, једноставног наслеђивања, имаћемо класу Анимал, која ће бити наша основна класа или родитељ, и 2 класе које ће наслиједити, Пас који неће имати никакав код и Цат који ће родитељској класи додати нови параметар. Хајде да видимо код (кратак је):
#инцлуде усинг намеспаце стд; класа Животиња {приватно: инт аге; публиц: Анимал (инт а = 1) {аге = а; }; инт гетАге () цонст {ретурн старост;} воид сетАге (инт а = 9) {аге = а; }}; разредни пас: јавна животиња {}; класа Мачка: јавна Животиња {приватно: флоат веигхт; јавна: Мачка (инт а = 2, пловак в = 3,2): Животиња (а) {тежина = в; } флоат гетВеигхт () цонст {повратна тежина;}}; инт маин () {Пас мастин; цоут << "____ДОГ____" << ендл; цоут << "Пре:" << мастин.гетАге () << ендл; мастин.сетАге (2); цоут << "Афтер:" << мастин.гетАге () << ендл; Мачка мијаукање (3, 4.1); цоут << "____ЦАТ____" << ендл; цоут << меов.гетАге () << "" << меов.гетВеигхт () << ендл; }Претпостављамо да већ знате неки Ц ++ да бисте наставили са питањима наслеђивања, па стога делове функција или јавне и приватне делове нећемо објашњавати. За наслеђивање од класе имамо следећу синтаксу:
цласс даугхтер_цласс: публиц парент_цлассДакле, у нашем примеру за креирање класе Пас користили смо:
разред Пас: јавна ЖивотињаУказује на то Пас наслеђује од Анимал -а, све што класа Анимал има у својим јавним или заштићеним блоковима можемо користити, међутим, ако користимо приватни блок, добићемо грешку. Добра класа Пас празан је, па нема већих потешкоћа.
Ако идемо на час Цат, имамо исту декларацију класе као и раније, осим тога видимо да додаје нову променљиву тежина, ова променљива нема то нити класу Анимал, ни Пас. Овде смо у конструктору класе назвали конструктор родитељске класе, па прослеђујемо податке за променљиву старост, а такође попуњавамо променљиву тежина.
БелешкаМожете видети да параметри које прослеђујемо функцијама могу имати подразумевану вредност.
У главни стварамо објекат класе Пас, подразумевано остављамо узраст и приказујемо га, а затим користимо функцију сетАге да се промени старост и поново покаже. На крају креирамо објекат класе Цат, и овај пут не допуштамо да променљиве имају подразумевану вредност и прослеђујемо им их при креирању објекта, а да се не би мењале ми их приказујемо.
Ако желимо покрените овај код на линук терминалу са г ++, радимо следеће:
г ++ -о тест тесц.гццИ да га покренете врло лако:
./тестПоказаћемо снимку са компилацијом и извршавањем малог кода:
2. Више наслеђивања у Ц ++
Да их виде опасности од више наслеђивања оставићемо врло мали код:
#инцлуде усинг намеспаце стд; цласс Анимал {публиц: воид валк () {цоут << "Валкинг ин Анимал" << ендл; }}; цласс Маммал {публиц: воид валк () {цоут << "Валкинг ин Маммал" << ендл; }}; разред пас: јавна животиња, јавни сисар {}; инт маин () {Пас пас; дог.валк (); }То видимо Пас наслеђује од Анимал И Сисар, а обе класе имају исту функцију Шетати, ако користим нормалну функцију као у коду:
дог.валк ()Компилацијом добијамо следећу грешку:
Да бисмо то решили, можемо користити следећу синтаксу за позивање функције Анимал:
дог.Анимал :: валк ();или да користим час Сисар:
дог.Мамиферо :: валк ();Наравно, најбоље решење није имати 2 функције са истим именом ако ћемо користити вишеструко наслеђивање, у овом програму је то врло лако решити, али у великом може да изазове главобољу. Да ли вам се допао и помогао овај водич?Можете наградити аутора притиском на ово дугме да бисте му дали позитиван поен