Объектга йўналтирилган программалаш


Download 0.58 Mb.
bet52/71
Sana08.05.2023
Hajmi0.58 Mb.
#1444224
TuriПрограмма
1   ...   48   49   50   51   52   53   54   55   ...   71
Bog'liq
С ОЙП

Виртуал функциялар
Чақириш интерфейси (прототипи) маълум, амалга оширилиши умумий кўринишда берилиши мумкин бўлмасдан, фақат конкрет ҳолатлардагини аниқланадиган функцияларга виртуал функциялар дейилади.
Виртуал функция – бу чақирилиши учун қандай ифода ишлатилишидан қатъий назар объект учун тўғри (мос) функция чақирилишини кафолатлайдиган функциядир.
Фараз қилайлик, таянч синфда функциянинг виртуал эълони, ҳосилавий синфда ҳам худди шу функция эълони бўлсин. У ҳолда ҳосилавий синф объектлари учун ҳосилавий синф функцияси чақирилади, агар улар чақирилишида таянч синфга кўрсаткич ёки мурожаат ишлатилган бўлса ҳам.
class Tayanch
{
public:
Tayanch(int _x) {x=_x;}
virtual int Qiymat_X(){return x;}
virtual void Chop_X();
private:
int x;
};
void Tayanch:: Chop_X()
{
cout<<"Tayanch::x="<
}
class Hosila_1: public Tayanch
{
public:
Hosila_1(int _x): Tayanch(_x){}
void Chop_X();
};
void Hosila_1:: Chop_X()
{
cout<<"Hosila_1::x="<
}
class Hosila_2: public Tayanch
{
public:
Hosila_2(int _x): Tayanch(_x){}
void Chop_X();
};
void Hosila_2:: Chop_X()
{
cout<<"Hosila_2::x="<
}


int main(int argc, char* argv[])
{
Tayanch * tayanch=new Tayanch(10);
Hosila_1 * hos1=new Hosila_1(20);
Hosila_2 * hos2=new Hosila_2(30);
tayanch->Chop_X();
tayanch=hos1;
tayanch->Chop_X();
tayanch=hos2;
tayanch->Chop_X();
while(1);
return 0;
}
Ҳосилавий синфлардаги Chop_X() функциялари виртуал ҳисобланади, чунки у Tayanch таянч синфида виртуал деб эълон қилинган. Виртуал функцияларни чақириш учун қуйидаги кодлар ишлатилган:

Download 0.58 Mb.

Do'stlaringiz bilan baham:
1   ...   48   49   50   51   52   53   54   55   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling