...
class Hosila_1 virtual public Tayanch
...
class Hosila_2 virtual public Tayanch
...
Программанинг бу вариантида
ob.y=5.0;
ob.Qiymat_X(10);
int z= ob.X_Qiymat();
мурожаатлар компиляция хатолигига олиб келмайди.
Шуни қайд қилиш керакки, синфлар шажарасида виртуал синфлар бўлганда конструкторлар бажарилиши кетма-кетлиги ўзгаради: олдин виртуал синфлар конструкторлари ишга тушади, кейинчалик новиртуал аждод синфлар конструкторлари ва охирида ҳосила синф конструктори ишлайди. Деструкторлар ишлаши шу кетма-кетликка тескари равишда амал қилади.
Функцияларни қайта юклаш
Функцияларни қайта юклашнинг афзаллиги
Функцияларни қайта юклаш– бу С++ тили томонидан қўллаб–қувватланадиган полиморфизм кўринишиларидан биридир. С++ тилида бир нечта функция бир хил номга эга бўлиши мумкин. Бу номдаги функцияни қайта юкланувчи функция дейилади. Аргументларининг турлари ёки сони билан фарқланадиган функцияларгина қайта юкланиши мумкин. Қайтарувчи қаймат тури билан фарқ қиладиган функцияларни қайта юклаб бўлмайди. Функцияларни қайта юклаш орқали мазмунан бир хил амал бажарувчи функцияларни бир хил ном билан аташ орқали программани соддалаштириш мумкин.
Функцияларни қайта юклаш учун уни эълонини бериш ва кейин зарур бўлган барча чақириш вариантларини аниқлаш керак бўлади. Компиляторнинг ўзи аргументлар сони ва турига мос равишда функциянинг керакли вариантини танлайди. Мисол:
include
// abs() функциясини қайта юклаш
int abs(int n);
long abs(long l);
double abs(double d);
main()
{
int n=125; long l=-26L; double d=-15.0L;
cout<
cout<
cout<
return 0;
Do'stlaringiz bilan baham: |