C ++ funkcijos nepaisymas

C Function Overriding



Šiame straipsnyje aptarsime funkcijų nepaisymą C ++ programavimo kalba. „C ++“ palaiko veikimo laiko polimorfizmą.

Funkcijų nepaisymo atveju antrinė klasė iš naujo apibrėžia funkciją, kuri jau yra apibrėžta jos tėvų klasėje.







Tai leidžia programuotojui teikti išvestines konkrečiai klasei skirtas funkcijas (net jei tai apibrėžta pagrindinėje klasėje).



Dabar pamatysime keletą pavyzdžių ir suprasime funkcijų viršenybės koncepciją C ++.



1 pavyzdys

Žemiau esančiame pavyzdiniame kode apibrėžiau dvi klases - bazinę klasę ir išvestinę klasę. Bazinė klasė turi nario funkciją, ty disp (). „Derived_Class“ yra paveldima iš „Base_Class“. Funkcija disp () yra „Base_Class“, o tada iš naujo apibrėžta „Derived_Class“.





Pagrindinėje () funkcijoje sukuriamas Derived_Class objektas, t.y., d. Tada mes vadiname funkciją disp () išvestiniame klasės objekte, todėl bus iškviesta išvestinės klasės funkcija. Bazinės klasės versija čia ignoruojama. Žemiau galite pamatyti išvesties kaip - disp () funkciją išvestinėje klasėje.

#įtraukti

naudojant vardų srities standartą;

// bazinė klasė
klasė Base_Class
{
viešas:
tuštumapasinaudoti()
{
kaina<< 'disp () funkcija bazinėje klasėje.' <<endl;
}

};

// išvestinė klasė
klasė Derived_Class:public Base_Class
{
viešas:
tuštumapasinaudoti()
{
kaina<< „disp () funkcija išvestinėje klasėje“ <<endl;
}
};

tarptpagrindinis()
{
Išvestinė_ klasė d;
d.pasinaudoti(); // disp () funkcija išvestiniame klasės objekte
grįžti 0;
}



2 pavyzdys

Šiame pavyzdyje pamatysime, kaip sąmoningai iškviesti pagrindinės klasės versiją per išvestinį klasės objektą. Išvestinėje klasės funkcijos apibrėžtyje mes naudojame apimties skiriamosios gebos operatorių [::], kad iškviestume bazinės klasės funkcijos versiją.

#įtraukti

naudojant vardų srities standartą;

klasė Base_Class
{
viešas:
tuštumapasinaudoti()
{
kaina<< 'disp () funkcija bazinėje klasėje.' <<endl;
}

};

klasė Derived_Class:public Base_Class
{
viešas:
tuštumapasinaudoti()
{
Base_Class::pasinaudoti(); // Skambinkite bazinės klasės disp () versijai
}
};

tarptpagrindinis()
{
Išvestinė_ klasė d;
d.pasinaudoti();
grįžti 0;
}

3 pavyzdys

Tai dar vienas funkcijų nepaisymo pavyzdys. Šiame pavyzdyje mes sukūrėme tėvų klasę - Gyvūnai ir dvi išvestines klases - Antis ir Šuo. Bazinė klasė, ty gyvūnų klasė, turi nario funkcijos garsą ().

Išvestinėje klasėje/vaikų klasėje, t. Y. Šuo, iš naujo apibrėžėme tą pačią funkciją, ty garsą (), kad nepaisytume pagrindinės klasės apibrėžties. Panašiai ir kitoje išvestinėje klasėje, t. Y. Duck, iš naujo apibrėžėme tą pačią funkciją, ty garsą ().

Pagrindinėje () funkcijoje sukūrėme šuns objektą Šuo ir Antis. Taigi, dabar, kai šunį ir antį vadiname garso () funkcija, iškvies garso () funkcijos išvestinę klasės versiją. Galite pamatyti programos išvestį, kaip parodyta žemiau. Taigi, nepaisydami funkcijos, galime iškviesti išvestinę konkrečios klasės funkciją.

#įtraukti

naudojant vardų srities standartą;

klasės gyvūnai
{
viešas:
tuštumagarsas()
{
kaina<< 'Gyvūnų garsas!' <<endl;
}

};

// Išvestinė klasė - Šunų klasė
klasės Šuo:viešas Gyvūnas
{
viešas:
tuštumagarsas()
{
kaina<< 'Šuns garsas - žievė'. <<endl;
}
};

// Išvestinė klasė - Anties klasė
klasės Antis:viešas Gyvūnas
{
viešas:
tuštumagarsas()
{
kaina<< 'Anties garsas - kvaila.' <<endl;
}
};


tarptpagrindinis()
{
Šuo šuo;
Ančių antis;

šuo.garsas(); // šuns garsas ()
antis.garsas(); // garsas () antis

grįžti 0;
}

Išvada

Šiame straipsnyje aš paaiškinau funkcijų nepaisymą C ++ . C ++ kalba palaiko vykdymo laiko polimorfizmą. Funkcijų nepaisymas padeda pasiekti veikimo laiko polimorfizmą C ++. Šiame straipsnyje apžvelgta funkcijų nepaisymo koncepcija ir kaip pasiekti veikimo laiko polimorfizmą naudojant funkcijų nepaisymą.