Hvad menes der med polymorfisme i C?


Bedste svar

Faktisk er der intet begreb polymorfisme i C. Polymorfisme er en egenskab ved objektorienteret programmering. Da C ikke er en OOP, har C ikke noget koncept for polymorfisme. Mens C ++ har, da det er et objektorienteret programmeringssprog (ikke fuldstændigt).

Polymorfisme betyder at have mange former. Der er hovedsageligt to typer polymorfe i C ++:

  • Kompileringstid polymorfisme
  • Runtime polymorfisme
    1. Kompileringstidspolymorfisme : Denne type polymorfisme opnås ved funktionsoverbelastning eller operatøroverbelastning.
  • Funktion Overbelastning : Når der er flere funktioner med samme navn, men forskellige parametre, siges disse funktioner at være overbelastet . Funktioner kan overbelastes ved ændring i antal argumenter eller / og ændring i argumenttype .

#include

using namespace std;

class Geeks

{

public:

// function with 1 int parameter

void func(int x)

{

cout << "value of x is " << x << endl;

}

// function with same name but 1 double parameter

void func(double x)

{

cout << "value of x is " << x << endl;

}

// function with same name and 2 int parameters

void func(int x, int y)

{

cout << "value of x and y is " << x << ", " << y << endl;

}

};

int main() {

Geeks obj1;

// The first "func" is called

obj1.func(7);

// The second "func" is called

obj1.func(9.132);

// The third "func" is called

obj1.func(85,64);

return 0;

}

  • Operatøroverbelastning: C ++ giver også mulighed for overbelastning af operatører. For eksempel kan vi gøre operatoren (+) til strengklasse til at sammenkæde to strenge. Vi ved, at dette er den tilføjelsesoperator, hvis opgave er at føje til operander. Så en enkelt operator +, når den placeres mellem heltal-operander, tilføjer dem, og når den placeres mellem strengoperander, sammenkædes dem.

#include

using namespace std;

class Complex {

private:

int real, imag;

public:

Complex(int r = 0, int i =0) {real = r; imag = i;}

// This is automatically called when "+" is used with

// between two Complex objects

Complex operator + (Complex const &obj) {

Complex res;

res.real = real + obj.real;

res.imag = imag + obj.imag;

return res;

}

void print() { cout << real << " + i" << imag << endl; }

};

int main()

{

Complex c1(10, 5), c2(2, 4);

Complex c3 = c1 + c2; // An example call to "operator+"

c3.print();

}

2. Polymorfisme i løbetid: : Denne type polymorfisme opnås ved funktionen Overriding.

  • Funktionsoverstyring: derimod opstår, når en afledt klasse har en definition for en af ​​basisklassens medlemsfunktioner. Denne basisfunktion siges at være tilsidesat.

#include

using namespace std;

// Base class

class Parent

{

public:

void print()

{

cout << "The Parent print function was called" << endl;

}

};

// Derived class

class Child : public Parent

{

public:

// definition of a member function already present in Parent

void print()

{

cout << "The child print function was called" << endl;

}

};

//main function

int main()

{

//object of parent class

Parent obj1;

//object of child class

Child obj2 = Child();

// obj1 will call the print function in Parent

obj1.print();

// obj2 will override the print function in Parent

// and call the print function in Child

obj2.print();

return 0;

}

Svar

Fordi det er definitionen på polymorfisme: koden gør ikke t vide indtil runtime, hvad der er den aktuelle klasse for et objekt.

Lad os ved hjælp af et traditionelt eksempel overveje en basisklasseform med en draw () metode. Form har to underklasser: Cirkel og Firkant, som begge tilsidesætter tegning () til - du gættede det - tegner henholdsvis en cirkel og en firkant.

Nu lader applikationen brugeren oprette flere former. Og visningsopdateringsfunktionen gentages over dem og kalder:

currentShape.draw ()

compileren har ingen måde at vide på kompileringstidspunktet, om currentShape vil være en firkant eller en cirkel og således hvilke draw () implementering at kalde. Beslutningen skal træffes i løbetid.

Det er givet, at der er tilfælde, hvor compileren * kan * udlede den faktiske klasse af et objekt. I så fald vil det muligvis optimere kørselstiden.

Bemærk, at polymorfisme og denne kørselstid sendes til den korrekte implementering af en funktion afhængigt af den faktiske datatype for en (eller flere) af dens argumenter er meget nyttige og kraftfulde.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *