Цомпарисон Цхарт
Основа за поређење | Сингле Инхеританце | Мултипле Инхеританце |
---|---|---|
Басиц | Изведена класа наслеђује једну основну класу. | Изведена класа насљеђује двије или више од двије основне класе. |
Имплементација | Класа изведена класе: приступна_класа базне класе | Класа изведена _цласс: аццесс_специфиер басе_цласс1, аццесс_специфиер басе_цласс2, .... |
Приступ | Изведена класа приступа карактеристикама једне основне класе | Изведена класа приступа комбинованим карактеристикама наслеђених основних класа |
Видљивост | Јавно, приватно, заштићено | Јавно, приватно, заштићено |
Време рада | Потребно је мало времена за рад преко главе | Захтевајте додатну надоградњу у односу на појединачно наслеђивање |
Дефиниција јединственог наслеђивања
У појединачном наслеђивању постоји једна основна класа и једна изведена класа. Изведена класа насљеђује основну класу јавно, заштићено и приватно. Члановима основне класе може се приступити изведена класа према спецификатору приступа наведеном за наслеђивање основне класе.
Хајде да имамо пример из стварног живота, имамо две класе, “класу рачуна” и “класу штедног рачуна”. Овде "штедња класа рачуна" може наследити особину "класе рачуна", тако да ће класа "рачуна" постати основна / супер / родитељска класа за чување класе рачуна, а "штедња класа рачуна" ће бити изведена класа.
Овде су атрибути "класе налога" ацц_но (приватни) и баланс (јавни), а функције члана су инитиализе (), гет_аццно () које су јавне. Сада, „рачунска класа“ се наслеђује на „штедњу класе рачуна“ јавно, тако да се свим јавним члановима „класе рачуна“ може директно приступити путем „штедње класе рачуна“. Може приступити приватном члану “класе рачуна” преко јавних функција “класе рачуна”, али им не може приступити директно.
Имплементација једног наслеђивања:
# укључују коришћење имена простора стд; класа Аццоунт {инт ацц_но, ; публиц: флоат баланце; воид иницијализује (инт к, инт и) {ацц_но = к; баланс = и; } инт гет_аццно. () {ретурн ацц_но; }}; цласс Савинг_ацц: јавни налог {флоат интрест_рате; публиц: // конструктор класе Савинг_ацц Савинг_ацц (инт ц) {интерест_рате = ц; } воид дисплаи () {цоут <Дефиниција вишеструког наслеђивања
Вишеструко наслеђивање дозвољава да изведена класа наследи комбиноване карактеристике више од једне базне класе, тј. Имамо једну изведену класу и више базних класа. Свака базна класа мора бити наслеђена тако што ће поменути посебан приступник за сваки од њих. Изведена класа може приступити члановима основних класа на основу спецификатора приступа којим се наслеђује основна класа.
Омогућимо да олакшамо са примером да имамо три класе тј. Бицикл, ауто и возило. Сада, "Возило" може наследити карактеристике "Бике" као и "Цар". Дакле, "Возило" постаје изведена класа, а "Бике" и "Цар" постају основна класа. Сада, "Бике" и "Цар" су јавно наслеђени од "Вехицле" и могу да приступе свим јавним члановима "Бике" и "Цар", али како имамо ентитет Модел_но заштићен у "Цару", тако је приватан за Цар, али може бити приступљено од стране "Вехицле".
Имплементација вишеструког наслеђивања:
# укључује коришћење имена простора стд; цласс Бике {инт енгине_цост; ; публиц: воид сет_енгине_цост (инт к) {енгине_цост = к; }}; класа Цар {протецтед: инт Модел_но; публиц: воид сет_Модел_но (инт п) {Модел_но = п; }}; класа Вехицал: публиц Бике, јавни ауто {инт но_оф_вхеелс публиц: вехицал (инт в) {но_оф_вхеелс = в; цоут << "но оф вхеелс" <Кључне разлике између појединачног и вишеструког наслеђивања
- Појединачно наслеђивање је једна изведена класа која има једну базну класу, док у вишеструком наслеђивању има две или више од две основне класе, али појединачну изведену класу.
- Вишеструко наслеђивање је прилично збуњујуће, јер овде једна појединачна класа наслеђује две или више базне класе. Ако базне класе имају атрибут или функцију са истим именом онда за изведену класу, постаје тешко идентификовати атрибут или функцију основне класе коју он треба да изведе.
- Издаци за режије су мањи у случају једног наслеђивања. Али у случају вишеструког наслеђивања, конструкција или уништење објекта позива конструкторе и деструкторе родитељске класе у хијерархији класа која повећава оптерећење.
- Једно наслеђе је више према специјализацији. Док је вишеструко наслеђивање више према генерализацији.
- Пошто једно наслеђе има мање оптерећења има мање времена у односу на вишеструко наслеђивање.
Закључак
Наслеђивање олакшава рад програмера, јер ако је једна класа већ формирана, њене особине се могу прилагодити другим ако је потребно. Иако спецификатор приступа ограничава приступ члановима основне класе на одређени начин, али чини податке сигурнијим. Појединачно наслеђивање је на неки начин једноставније и једноставније за имплементацију од вишеструког наслеђивања. Наслеђивање смањује величину објектног кода, али и утиче на вријеме извођења програма.