Разлика између преоптерећења функције и прегласавања у Ц ++

Аутор: Laura McKinney
Датум Стварања: 1 Април 2021
Ажурирати Датум: 11 Може 2024
Anonim
Гибкий маркетинг - пошаговое руководство
Видео: Гибкий маркетинг - пошаговое руководство

Садржај


Ин 'преоптерећење'Редефинирамо преоптерећене функције с истим називом функције, али различитим бројем и врстом параметара. Ин 'превладавајући„Прототип прекобројене функције је исти у целом програму, али функцији која ће се прескочити претходи кључна реч„ виртуелна “у основној класи и редефинише је изведена класа без икакве кључне речи.

Полиморфизам је једна од кључних карактеристика ООП-а. То једноставно значи „користити једно име за више образаца“. Полиморфизам се може имплементирати употребом „преоптерећења функције“, „преоптерећења оператора“ и „виртуалне функције“. И „преоптерећење“ и „прегласавање“ подразумевају концепт полиморфизма. Овде је „преоптерећење“ временски полиморфизам, а „прегласавање“ је полиморфизам у току времена. Проучавајући даље, ако говоримо о главној разлици у „преоптерећењу“ и „прегласавању“.

Надаље, проучавамо разлику између преоптерећења и прегласавања уз помоћ упоредног графикона.

  1. Упоредни графикон
  2. Дефиниција
  3. Кључне разлике
  4. Сличности
  5. Закључак


Упоредни графикон:

Основе за упоређивањеПреоптерећењеПревладавајући
ПрототипеПрототип се разликује јер се број или врста параметра могу разликовати.Сви аспекти прототипа морају бити исти.
Кључна речТоком преоптерећења није примењена ниједна кључна реч.Функцији коју треба прегласити претходи кључна реч виртуална, у основној класи.
Разликујући факторБрој или врста параметра разликује се што одређује да се позива верзија функције.Коју функцију класа позива показивач, одређује се адресом која је класа предмет додијељена том показивачу.
Дефинисање образацаФункције су редефинисане истим именом, али различитим бројем и врстом параметра.Функција је дефинисана, а претходи јој кључна реч виртуална у главној класи и редефинише је изведена класа са кључном речју.
Време реализацијеВреме компилације.Време трајања.
Конструктор / Виртуелна функцијаКонструктори се могу преоптеретити.Виртуелна функција се може надјачати.
Деструктор
Деструктор се не може преоптеретити.Деструктор се може надјачати.
ВезивањеПреоптерећењем се постиже рано везивање.Прекорачење се односи на касно везивање.


Дефиниција преоптерећења

Полиморфизам у компилацијском времену назива се „преоптерећење.“ Како се преоптерећење генерише из концепта полиморфизма, он омогућава „заједничко сучеље за више метода“. То значи, ако је функција преоптерећена, она садржи исто име функције док је редефинирано.

Преоптерећене функције се разликују у односу на, различит 'број или врсту параметара (-а)', то разликује једну преоптерећену функцију од друге. На овај начин, преводилац препознаје која се преоптерећена функција позива. Најчешће преоптерећене функције су „конструктори“. „Конструктор копирања“ је врста „преоптерећења конструктора“.

Имплементација преоптерећења у Ц ++

преоптерећење класе {инт а, б; публиц: инт лоад (инт к) {// прво оптерећење () функција а = к; ретурн а; } инт лоад (инт к, инт и) {// сецонд лоад () функција а = к; б = и; вратити а * б; }}; инт маин () {преоптерећење О1; О1.лоад (20); // први позив () функције позива позив на О1.лоад (20,40); // други позив () функције позива}

Овде је оптерећење функције () класе преоптерећено. Две преоптерећене функције класе могу се разликовати на начин да прва функција лоад () прихвата само један цјелобројни параметар, док друга лоад () функција прихвата два цјелобројна параметра. Када објект преоптерећења класе позива функцију лоад () са једним параметром, позива се прва лоад () функција. Када објект позива функцију лоад () која пролази два параметра, позива се функција сецонд лоад ().


Дефиниција прегласавања

Полиморфизам постигнут током извођења времена назива се „прекомерно надокнађивање“. То се постиже употребом „наслеђивања“ и „виртуелних функција“. Функцији коју треба прегласити претходи кључна реч „виртуални“ у основној класи и редефинисаној у изведеној класи без икакве кључне речи.

Једна од најважнијих ствари које треба имати на уму у случају прегласавања је да се прототип преглашене функције не сме мењати, док изведена класа то редефинише. Кад се прегласеној функцији додјељује позив, Ц ++ одређује која се иначица функције позива на основу „врсте објекта која је указала показивачем” којом се врши позивање функције.

Имплементација превладавања у Ц ++

цласс басе {публиц: виртуал воид фунцт () {// виртуална функција базе цоут << класе << "Ово је функција басе цлассс ()"; }}; цласс извед1: јавна база {публиц: воид фунцт () {// виртуална функција основне класе редефинирана у изведеном ц1 цоут << "Ово је изведена1 класа фунцт ()"; }}; класа изведен2: јавна база {публиц: воид фунцт () {// виртуелна функција основне класе редефинисана у изведеном разреду цоут << "Ово је изведен2 класе фунцт ()"; }}; инт маин () {база * п, б; изведен1 д1; изведени2 д2; * п = & б; п-> фунцт (); // позив на функцију основне класе (). * п = & д1; п-> фунцт (); // позив на изведену функцију класе1 (). * п = & д2; п-> фунцт (); // позив на изведену функцију класе2 (). ретурн 0; }

Овде постоји једна основна класа коју јавно наслеђују две изведене класе. Виртуелна функција је дефинисана у основној класи са кључном речју „виртуална“ и редефинише је обе изведене класе без кључне речи. У маин (), основна класа креира варијаблу поинтера 'п' и објект 'б'; Класа 'изведен1' ствара објект д1, а класа изведен2 ствара објект д2 '.

Сада је почетно адреса објекта „б“ основне базе додељена показивачу основне класе „п“. 'П' позива функцију функције (), па се позива функција основне класе.Затим је адреса изведеног објекта класе 'д1' додељена показивачу 'п', поново позива на функцт (); овде се извршава функција фунцт () изведене1 класе. Коначно, показивач 'п' додељен је објекту изведене класе2. Затим 'п' позива функцију фунцт () која извршава функцију фунцт () изведене2 класе.

Ако класа изведен1 / изведена2 није редефинирала функцију (), тада би функцију () основне класе назвали, јер је виртуална функција "хијерархијска".

  1. Прототип функције која се преоптерећује разликује се због врсте и броја параметара који су прослеђени функцији преоптерећеној. С друге стране, прототип прекобројене функције се не мења јер прекачена функција врши различите акције за другу класу којој припада, али са истим типом и бројем параметара.
  2. Преоптерећено име функције не претходи ниједној кључној речи, док име прекачене функције претходи само тастатури „Виртуално“ само у основној класи.
  3. Која се преоптерећена функција позива зависи од врсте или броја параметра који се преносе у функцију. Преписана функција из које се класе позива зависи од тога која адреса објекта класе је додељена показивачу који је позвао функцију.
  4. Која преоптерећена функција коју треба позвати решава се током компајлирања. Која пребројена функција коју треба позвати решава се током извођења.
  5. Конструктори се могу преоптеретити, али се не могу прегласити.
  6. Деструктори се не могу преоптеретити, али се могу прегласити.
  7. Преоптерећењем се постиже рано везивање, јер ће се позвати преоптерећена функција која је решена током компајлирања. Надјачавањем се постиже касно везивање, јер ће се надјачати функција која се преиспитује током решавања.

Сличности

  1. Обоје се примењују на функције чланова класе.
  2. Полиморфизам је основни концепт који стоји иза њих двојице.
  3. Назив функције остаје исти док примењујемо преоптерећење и прегласавање функција.

Закључак

Чини се да је преоптерећење и прегласавање слично, али то није случај. Функције се могу преоптеретити, али било која класа не може даље редефинисати преоптерећену функцију у будућности. Виртуелна функција се не може преоптеретити; могу се само поништити