return 0;
}
Программа ишлаши натижасида экранга
10
11
12
0
қийматлари чоп этилади.
Бу усулдан бир берилганларнинг бир синф туридан иккинчи синф турига ўтказишда фойдаланиш мумкин. Қуйида келтирилган мисол буни намоён этади.
#include
class Sinf_1
{
int x;
public:
Sinf_1(){x=5;};
int qiymat(){return x;};
};
class Sinf_2
{
int z;
public:
Sinf_2(){z=10;};
Sinf_2(Sinf_1 & ob_k); // ўзгартириш конструктори
int qiymat(){return z;}
};
Sinf_2::Sinf_2(Sinf_1 & ob_1)
{
z=ob_1.qiymat();
}
void func(Sinf_2 & ob_2)
{
cout<
}
int main()
{
Sinf_1 sinf_1;
func(sinf_1); // Sinf_1 тури Sinf_2 турига ўзгартирилади
Sinf_2 sinf_2;
func(sinf_2); // тур ўзгартиришга ҳожат йўқ
return 0;
}
Шуни қайд этиш керакки, конструкторларни қайта юклашнинг турли вариантларни ишлатиш мумкин, лекин уларнинг самараси программа тузувчи зиммасида бўлади.
Умуман олганда, шуни инобатга олиш керакки, фойдаланувчи томонидан кўрсатиладиган турларни ўзгартиришлар компилятор томонидан қуйидаги ҳолатлардагина амалга оширада:
объектларни инициализация қилишда;
функцияларни чақиришда;
функция қиймат қайтаришида.
Турни ўзгартириш конструкторидан турларни ошкор равишда келтиришда фойдаланиш мумкин:
...
void main()
{
Sinf_1 sinf_1;
//Oшкор равишда турга келтириш
Sinf_2 sinf_12=(Sinf_1)sinf_1;
...
Do'stlaringiz bilan baham: |