Mitä polymorfismilla tarkoitetaan C: ssä?


Paras vastaus

Oikeastaan ​​C: ssä ei ole käsitystä polymorfismista. Polymorfismi on olio-ohjelmoinnin ominaisuus. Koska C ei ole OOP, C: llä ei ole mitään käsitystä polymorfismista. C ++: lla on, koska se on olio-ohjelmointikieli (ei täysin).

Polymorfismi tarkoittaa monien muotojen käyttämistä. C ++: ssa on pääasiassa kahta polymorfimityyppiä:

  • kokoamisajan polymorfismi
  • ajonaikaiset polymorfismit
    1. Käännä aikapolymorfismi : Tämän tyyppinen polymorfismi saavutetaan toiminnan ylikuormituksella tai käyttäjän ylikuormituksella.
  • Funktion ylikuormitus : Kun on olemassa useita toimintoja, joilla on sama nimi, mutta erilaiset parametrit, näiden toimintojen sanotaan olevan ylikuormitettuja . Funktiot voivat olla ylikuormitettuja argumenttimäärän muutoksella tai / ja argumenttityypin muutoksella .

#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;

}

  • Operaattorin ylikuormitus: C ++ tarjoaa myös mahdollisuuden ylikuormittaa operaattoreita. Esimerkiksi voimme tehdä merkkijonoluokasta operaattorin (’+’) ketjuun kaksi merkkijonoa. Tiedämme, että tämä on lisäysoperaattori, jonka tehtävänä on lisätä operandeihin. Joten yksi operaattori +, kun se sijoitetaan kokonaislukuoperandien väliin, lisää ne ja merkkijonooperandien väliin yhdistää ne.

#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. Suorituksenaikainen polymorfismi: : Tämän tyyppinen polymorfismi saavutetaan funktion ohituksella.

  • Funktion ohittaminen: tapahtuu toisaalta, kun johdetulla luokalla on määritelmä yhdelle perusluokan jäsenfunktiosta. Tämän perustoiminnon sanotaan ohitettavan.

#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;

}

Vastaa

Koska tämä on polymorfismin määritelmä: koodi ei en tiedä ajonaikaan, mikä on jonkin objektin todellinen luokka.

Tarkastellaan perinteistä esimerkkiä käyttämällä perusluokan Shape kanssa draw () menetelmää. Shapella on kaksi alakategoriaa: ympyrä ja neliö, jotka molemmat ohittavat piirtämisen () arvataksesi piirtämään ympyrän ja neliön.

Nyt sovellus antaa käyttäjälle mahdollisuuden luoda useita muotoja. Ja näkymän päivitystoiminto toistaa ne ja kutsuu:

currentShape.draw ()

kääntäjällä ei ole mahdollisuutta tietää kääntöhetkellä, onko currentShape neliö vai ympyrä ja mikä vetää () toteutuksen kutsua. Päätös on tehtävä ajon aikana.

On tosin tapauksia, joissa kääntäjä * voi * päätellä objektin todellisen luokan. Siinä tapauksessa se mahdollisesti optimoi ajonaikaisen haun.

Huomaa, että polymorfismi ja tämä ajoaika välittävät funktion oikean toteutuksen yhden (tai useamman) sen todellisen tietotyypin mukaan. argumentit ovat erittäin hyödyllisiä ja tehokkaita.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *