Препоръчано, 2024

Избор На Редактора

Разлика между претоварване на функциите и преодоляване в C ++

Полиморфизмът е една от ключовите характеристики на ООП. Това просто означава „използване на едно име за множество форми“. Полиморфизмът може да бъде реализиран чрез използване на „претоварване на функциите“, „претоварване на оператора“ и „виртуална функция“. Както „претоварването“, така и „преодоляването“ предполагат понятието за полиморфизъм. Тук „претоварването“ е полиморфизъм на времето за компилация и „преодоляване“ е полиморфизъм на времето за изпълнение. Проучване по-нататък, ако говорим за основната разлика в „претоварването“ и „преодоляването“. При „претоварване“ предефинираме претоварените функции със същото име на функция, но различен брой и тип параметри. В 'overriding' прототипа на overridden функцията е една и съща в цялата програма, но функцията, която трябва да бъде отменена, се предшества от ключовата дума 'virtual' в базовия клас и се предефинира от извлечения клас без ключова дума.

Освен това изучаваме разликата между претоварване и преодоляване с помощта на сравнителна таблица.


Сравнителна таблица:

Основа за сравнениеПретоварванетоЗамяната
прототипПрототипът се различава в зависимост от броя или вида на параметъра.Всички аспекти на прототипа трябва да бъдат еднакви.
Ключова думаПо време на претоварването не е използвана ключова дума.Функцията, която трябва да бъде отменена, се предшества от ключовата дума "виртуална" в базовия клас.
Отличителен факторНомерът или типът на параметъра се различава, което определя, че се извиква версията на функцията.Коя функция на класа се извиква от показалеца, се определя от, адресът на обекта на който клас е присвоен на този указател.
Определяне на моделФункцията се предефинира със същото име, но с различен номер и тип параметър.Функцията е дефинирана, предшествана от ключова дума "виртуална" в основния клас и предефинирана от извлечен клас без ключова дума.
Време на изпълнениеВреме за компилиране.Време за изпълнение.
Конструктор / виртуална функцияКонструкторите могат да бъдат претоварени.Виртуалната функция може да бъде отменена.
пещ за горене на отпадъци
Деструкторът не може да бъде претоварен.Деструкторът може да бъде отменен.
подвързванеПретоварването постига ранно свързване.Пренасочването се отнася до късно свързване.

Определение за претоварване

Полиморфизмът при компилиране се нарича „претоварване“. Тъй като претоварването се генерира от концепция за полиморфизъм, то осигурява „общ интерфейс за множество методи“. Това означава, че ако дадена функция е претоварена, тя съдържа същото име на функция, докато е предефинирана.

Претоварените функции се различават по отношение на, различен „номер или тип параметър (и)“, което прави една претоварена функция различна от друга. По този начин компилаторът разпознава коя претоварена функция се извиква. Най-често претоварените функции са "конструкторите". „Копиране на конструктор“ е вид „претоварване на конструктора“.

Изпълнение на претоварване в C ++

 претоварване на клас {int a, b; public: int load (int x) {// първата функция на натоварването () a = x; връщане a; } int load (int x, int y) {// втората функция на натоварването () a = x; б = Y; връщане a * b; }}; int main () {претоварване O1; O1.load (20); // първата функция на функцията load () O1.load (20, 40); // второ функционално повикване () 

Тук функцията load () на претоварване на класа е претоварена. Двете претоварени функции на класа могат да бъдат разграничени по такъв начин, че първата функция load () приема само един целочислен параметър, докато втората функция load () приема два цели числа. Когато обектът на претоварване на класа извика функцията load () с един параметър, първо се извиква функцията load (). Когато обектът извика функция load (), преминавайки през два параметъра, се извиква втората функция load ().

Дефиниция на преодоляване

Полиморфизмът, постигнат по време на изпълнение, се нарича „преодоляване“. Това се постига чрез използване на „наследство“ и „виртуални функции“. Функцията, която трябва да бъде отменена, се предшества от ключовата дума "виртуална" в базовия клас и се предефинира в произволен клас без ключова дума.

Едно от най-важните неща, които трябва да запомните в случай на преодоляване, е, че прототипът на подчинената функция не трябва да се променя, докато извлеченият клас го предефинира. Когато функцията overridden е дадена на повикване, C ++ определя коя версия на функцията се нарича въз основа на "типа на обекта, посочен от показалеца", чрез който се извършва функционалното извикване.

Реализация на преодоляване в C ++

 class base {public: virtual void funct () {// виртуална функция на базисния клас cout << "Това е функцията на базовия клас ()"; }}; клас deriv1: публична база {public: void funct () {// виртуална функция на базовия клас, предефинирана в deriv1 class cout << "Това е funct ()" клас на deriv1 () "; }}; клас deriv2: обществена база {public: void funct () {// виртуална функция на базовия клас, предефинирана в подизпълнител клас cout  Funct (); // извикване на функцията deriv1 клас (). * Р = & d2; р> Funct (); // извикване на функцията deriv2 class (). return 0; } 

Тук има един основен клас, който е публично наследен от два извлечени класа. Виртуалната функция се дефинира в базов клас с ключова дума "виртуална" и се предефинира от двата изведени класа без ключова дума. В main () базовият клас създава променлива на показалеца 'p' и обект 'b'; 'deriv1' класа създава обект d1 и deriv2 клас създава обект d2 '.

Сега, първоначално адресът на обекта 'b' на базовия клас се присвоява на показалеца на базовия клас 'p'. 'p' извиква функцията funct (), така че се извиква функция на базовия клас. Тогава адресът на derivat1 клас обект 'd1' е присвоен на показалеца 'p', отново той дава на функцията funct (); тук се изпълнява функцията funct () на deriv1 клас. И накрая, указателят 'p' е присвоен на обекта от портовата класа. Тогава 'p' призовава функцията funct (), която изпълнява функцията func () на deriv2 клас.

Ако deriv1 / вывезения клас не предефинира funct (), тогава функцията () на базовия клас би била наречена, тъй като виртуалната функция е "йерархична".

Ключови разлики между претоварване и преодоляване

  1. Прототипът на функция, която е претоварена, се различава поради типа и броя на параметъра, които се предават на претоварената функция. От друга страна, прототипът на подчинената функция не се променя, тъй като функция за заместване изпълнява различно действие за различен клас, към което принадлежи, но със същия тип и номер на параметър.
  2. Името на претоварената функция не предхожда с никаква ключова дума, докато името на функция за заместване предхожда с клавиша "Виртуална" само в базовия клас.
  3. Коя претоварена функция се извиква зависи от типа или броя на параметъра, който се предава на функцията. Преодоляната функция, от която се извиква класа, зависи от това кой обектен адрес е присвоен на показалеца, който е извикал функцията.
  4. Коя претоварена функция трябва да бъде извикана, се решава по време на компилиране. Коя отменяща се функция, която трябва да се извика, е разрешена по време на изпълнение.
  5. Конструкторите могат да бъдат претоварени, но не могат да бъдат преодолени.
  6. Деструкторите не могат да бъдат претоварени, но могат да бъдат отменени.
  7. Претоварването постига ранно свързване, когато претоварената функция ще бъде извикана по време на компилирането. Преодоляването постига късно свързване, тъй като функцията за заместване ще бъде разрешена по време на изпълнение.

прилики

  1. И двете се прилагат към членните функции на даден клас.
  2. Полиморфизмът е основната концепция зад тях.
  3. Името на функцията остава същото, докато ние прилагаме претоварване и преодоляване на функциите.

заключение

Претоварването и преобладаването изглеждат подобни, но това не е така. Функциите могат да бъдат претоварени, но всеки клас не може допълнително да предефинира претоварената функция в бъдеще. Виртуалната функция не може да бъде претоварена; те могат само да бъдат отменени.

Top