Suprascrierea funcției în C++ [supraîncărcarea funcției vs suprascrierea cu exemple]

Publicat: 2021-05-25

Suprascrierea funcției în C++ este o caracteristică care ne permite să folosim o funcție din clasa copil care este deja prezentă în clasa părinte. Clasa copil moștenește toți membrii de date și funcțiile membru prezente în clasa părinte. Dacă doriți să suprascrieți orice funcționalitate din clasa copil, atunci puteți implementa suprascrierea funcției. Suprascrierea funcției înseamnă crearea unei versiuni mai noi a funcției de clasă părinte în clasa copil.

Cuprins

Funcții C++

O funcție C++ este un grup de instrucțiuni care se reunesc pentru a îndeplini o sarcină. Fiecare program are cel puțin o funcție main() și anumite programe pot avea funcții suplimentare.

Declarația funcției transmite compilatorului numele funcției, parametrii și tipul de returnare. O definiție a funcției determină corpul funcției. Biblioteca standard C++ constă din multe funcții încorporate pe care programul le poate apela. O funcție poate fi o metodă, o procedură sau o subrutină.

Definirea unei funcții

Sintaxa generală a unei funcții C++ este:

return_type function_name(lista de parametri) {

corp funcțional

}

Orice funcție C++ cuprinde un antet de funcție și un corp. Componentele unei funcții C++ sunt:

Tip returnat – Tipul returnat reprezintă tipul valorii returnate a funcției.

Nume funcție - Acesta indică numele funcției. Numele funcției împreună cu lista de parametri formează semnătura funcției.

Parametri – Un parametru este un substituent pentru valoarea returnată de funcție. Când o funcție este apelată, o valoare este transmisă parametrului care se numește parametrul actual.

Corpul funcției - Corpul funcției constituie lista de instrucțiuni care definesc ce va face funcția.

Apelarea unei funcții

Pentru a utiliza o funcție în C++, trebuie să invocați sau să apelați funcția. Controlul este transferat în funcție, funcția îndeplinește apoi sarcina dorită, iar instrucțiunea return returnează controlul înapoi la programul principal.

Trebuie să transmiteți parametrii necesari, inclusiv numele funcției, pentru a apela o funcție. Dacă funcția returnează o valoare, atunci valoarea poate fi stocată. Există câteva moduri prin care argumentele pot fi transmise unei funcții în timpul apelării acesteia. Tipurile de apel sunt Apel după valoare, Apel după referință și Apel cu indicator.

Suprascrierea funcției în C++

Când o clasă derivată sau o clasă copil definește o funcție care este deja definită în clasa de bază sau în clasa părinte, se numește suprascriere funcție în C++. Suprascrierea funcției ne ajută să obținem polimorfismul de rulare. Permite programatorilor să realizeze implementarea specifică a unei funcții deja utilizate în clasa de bază.

Exemplu:

Sursă

Studiați exemplul dat mai sus. Aici clasa părinte este „Base” și clasa fii „Derived”.

Rezultatul programului de mai sus va fi:

Funcție derivată

Funcția print() este declarată atât în ​​clasele de bază, cât și în clasele derivate. Când apelăm funcția print() prin obiectul clasei Derived, „derivat1”, print() din clasa Derived este invocat și executat prin suprascrierea aceleiași funcție a clasei de bază.

Funcționarea principiului de prevalență a funcției

Sursă

După cum puteți vedea din imaginea de mai sus, funcția clasei de bază a fost suprascrisă deoarece am apelat aceeași funcție prin obiectul clasei Derived.

Dacă apelăm funcția print() printr-un obiect din clasa Base, funcția nu va fi suprascrisă. De exemplu:

//Funcția de apelare a clasei de bază

Baza baza1;

base1.print(); // Ieșire: Funcție de bază

Rezultatul codului de mai sus va fi:

Funcția de bază

Cum se accesează funcțiile suprascrise în C++

Trebuie să utilizați operatorul de rezoluție a domeniului, „::” pentru a accesa funcția suprascrisă. O altă modalitate de a accesa funcția suprascrisă este prin utilizarea pointerului clasei de bază pentru a indica un obiect al clasei derivate și apelarea funcției prin indicator.

Exemplu:

Sursă

Rezultatul programului de mai sus va fi:

Funcție derivată

Funcția de bază

Funcționarea funcției Acces de suprascris

Sursă

Aici instrucțiunea derivată 1.print() accesează funcția print() a clasei Derived și instrucțiunea derived2.Base::print() accesează funcția print() a clasei Base.

Apelarea unei funcții suprascrise C++ din clasa derivată

În acest cod, numim funcția suprascrisă din clasa Derived însăși.

Funcționarea apelului de funcție suprascris din clasa Derived

Sursă

Comanda Base::print() apelează funcția suprascrisă din interiorul clasei Derived.

Învață cursuri de inginerie software online de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

Supraîncărcarea funcției vs. Suprascrierea funcției

Supraîncărcarea funcției este realizată în timpul compilării și poate fi făcută în clasa de bază și clasa derivată. Ajută la furnizarea de definiții multiple ale funcțiilor prin schimbarea semnăturii funcțiilor, cum ar fi tipul de date al parametrilor sau tipurile de returnare.

Suprascrierea funcției este realizată în timpul execuției. La suprascriere, clasa de bază este redefinită în clasa derivată cu același tip de returnare și parametri. Alte diferențe între suprascrierea funcției și supraîncărcarea funcției în C++ sunt:

1. Moștenirea

Suprascrierea funcției poate fi utilizată numai cu moștenirea clasei, în timp ce supraîncărcarea funcției nu necesită moștenirea clasei.

2. Semnătura funcției

Funcțiile supraîncărcate diferă ca semnătură fie prin numărul de parametri, fie prin tipul de parametri. În anularea funcției, semnăturile funcției rămân aceleași.

3. Domeniul de aplicare al funcției

Funcțiile suprascrise variază în domeniul de aplicare, în timp ce funcțiile supraîncărcate au același domeniu.

4. Comportamentul funcției

Suprascrierea funcției este esențială atunci când o funcție de clasă derivată trebuie să funcționeze diferit sau cu funcționalitate adăugată decât funcția de clasă de bază. Supraîncărcarea funcțiilor este implementată atunci când funcțiile cu același nume trebuie să aibă comportamente diferite în funcție de parametrii care le sunt transmise.

Dacă sunteți interesat să aflați mai multe despre dezvoltarea de software full-stack, consultați programul Executive PG de la upGrad și IIIT-B în dezvoltarea software full-stack, care este conceput pentru profesioniști care lucrează și oferă peste 500 de ore de formare riguroasă, peste 9 proiecte, și misiuni, statutul de absolvenți IIIT-B, proiecte practice practice și asistență la locul de muncă cu firme de top.

Ce este suprascrierea funcției?

Suprascrierea funcției este un concept în programarea orientată pe obiecte care permite unei funcții dintr-o clasă derivată să suprascrie o funcție din clasa sa de bază, dar cu o semnătură diferită (și de obicei cu o implementare diferită). Un aspect cheie al acestui lucru este că nu este posibil ca clasa derivată să „anuleze” modificările aduse clasei de bază, sau cel puțin nu este posibil fără a edita clasa de bază în continuare. O utilizare obișnuită a suprascrierii funcției este de a oferi o implementare implicită în clasa de bază și apoi de a suprascrie cu o implementare specifică în clasa derivată.

Care sunt diferențele dintre suprasolicitarea funcției și supraîncărcare?

Suprascrierea funcției are loc atunci când creați o funcție cu același nume ca o funcție care există deja într-o clasă de bază. Când se întâmplă acest lucru, noua funcție va înlocui funcția existentă și poate fi utilizată în locul funcției originale. Supraîncărcarea are loc atunci când creați funcții cu același nume, dar cu parametri diferiți. Când se întâmplă acest lucru, noua funcție va fi apelată în plus față de funcția originală, iar ambele funcții pot fi utilizate în orice context fără nicio problemă.

Ce este moștenirea în C++?