C ++ -toiminnon ohitus

C Function Overriding



Tässä artikkelissa käsitellään toimintojen ohitusta C ++ -ohjelmointikielellä. C ++ tukee ajonaikaista polymorfismia.

Funktion ohituksessa aliluokka määrittelee uudelleen funktion, joka on jo määritetty sen pääluokassa.







Sen avulla ohjelmoija voi tarjota johdettuja luokkakohtaisia ​​toimintoja (vaikka ne on määritetty perusluokassa).



Nyt näemme muutamia esimerkkejä ja ymmärrämme toimintojen korvaavan käsitteen C ++: ssa.



Esimerkki 1

Olen määrittänyt alla olevassa esimerkkikoodissa kaksi luokkaa - perusluokan ja johdetun luokan. Perusluokalla on jäsenfunktio, eli disp (). Derived_Class on peritty Base_Class -luokasta. Funktio disp () on läsnä Base_Classissa ja määritellään sitten uudelleen Derived_Class -luokassa.





Pääfunktiossa () luodaan Derived_Class -objekti eli d. Sitten kutsumme johdetun luokan objektin funktiota disp (), joten vedotaan johdetun luokan funktio. Perusluokan versio jätetään huomiotta tässä. Näet alla tuotos as - disp () -funktion johdetussa luokassa.

#sisältää

käyttämällä nimiavaruuden std;

// perusluokka
luokka Base_Class
{
julkinen:
mitätönkäyttää()
{
kustannus<< 'disp () -funktio perusluokassa.' <<endl;
}

};

// johdettu luokka
luokka Derived_Class:public Base_Class
{
julkinen:
mitätönkäyttää()
{
kustannus<< 'disp () -funktio johdetussa luokassa' <<endl;
}
};

inttärkein()
{
Derived_Class d;
d.käyttää(); // disp () -funktio johdetulla luokkaobjektilla
palata 0;
}



Esimerkki-2

Tässä esimerkissä näemme, kuinka toiminnon perusluokkaversio voidaan tarkoituksella kutsua johdetun luokkaobjektin kautta. Johdetussa luokkatoiminnon määritelmässä käytämme laajuuden resoluutiooperaattoria [::] kutsuaksemme funktion perusluokan version.

#sisältää

käyttämällä nimiavaruuden std;

luokka Base_Class
{
julkinen:
mitätönkäyttää()
{
kustannus<< 'disp () -funktio perusluokassa.' <<endl;
}

};

luokka Derived_Class:public Base_Class
{
julkinen:
mitätönkäyttää()
{
Base_Class::käyttää(); // Soita disp (): n perusluokan versioon
}
};

inttärkein()
{
Derived_Class d;
d.käyttää();
palata 0;
}

Esimerkki-3

Tämä on toinen esimerkki toimintojen ohittamisesta. Tässä esimerkissä olemme luoneet pääluokan - Eläin ja kaksi johdettua luokkaa - Ankka ja Koira. Perusluokalla, eli Animal -luokalla, on jäsenfunktion ääni ().

Johdetussa luokassa/lapsiluokassa, eli Koira, olemme määrittäneet uudelleen saman funktion, eli äänen (), ohittaakseen sen perusluokan määritelmän. Samoin toisessa johdetussa luokassa, eli Duck, olemme määritelleet saman funktion uudelleen, eli äänen ().

Päätoiminnossa () olemme luoneet koirakoiran Koira ja ankka. Joten nyt kun kutsumme sound () -funktiota koiralle ja ankalle, sound () -funktion johdettu luokkaversio soittaa. Näet ohjelman tuotoksen alla olevan kuvan mukaisesti. Joten funktion ohituksen avulla voimme kutsua johdetun luokkaspesifisen funktion.

#sisältää

käyttämällä nimiavaruuden std;

luokan Eläin
{
julkinen:
mitätönääni()
{
kustannus<< 'Eläinten ääni!' <<endl;
}

};

// Johdettu luokka - Koiraluokka
luokan Koira:julkinen eläin
{
julkinen:
mitätönääni()
{
kustannus<< 'Koiran ääni - kuori.' <<endl;
}
};

// Johdettu luokka - Ankka -luokka
luokan Ankka:julkinen eläin
{
julkinen:
mitätönääni()
{
kustannus<< '' Ankkaääni - huijari. '' <<endl;
}
};


inttärkein()
{
Koira koira;
Ankka ankka;

koira.ääni(); // koiran ääni ()
Ankka.ääni(); // ääni () ankasta

palata 0;
}

Johtopäätös

Tässä artikkelissa olen selittänyt toimintojen korvaamisen C ++ . C ++ -kieli tukee ajonaikaista polymorfismia. Toimintojen ohittaminen auttaa saavuttamaan ajonaikaisen polymorfismin C ++: ssa. Tässä artikkelissa tarkasteltiin toimintojen ohituksen käsitettä ja sitä, miten saavutetaan ajonaikainen polymorfismi funktion ohituksen avulla.