Конструкторларни қайта юклаш
Аксарият ҳолларда қайта юклаш механизмидан конструкторларни қайта юклашда фойдаланилади (деструкторни қайта юклаш мумкин эмас). Қайта юклаш қўлланишидан мақсад фойдаланувчига синф вакилининг (объектнинг) турли вариантлари билан ишлашга имкон беришдир. Эътибор берилган бўлса, олдин ҳам конструкторларнинг қайта юкланишини учраганди, лекин унда қайта юклаш ҳақида гапирилмаган эди.
Конструкторни қайта юклашга зарурат фойдаланувчига конструктор ёрдамида турларни алмаштириш имконини беришдир. Масалан, аргументида Sinf синф объектига мурожаат бўлган функцияни эълони берилган бўлсин:
void func(Sinf * ob_k);
Ушбу функцияни бошқа турдаги аргмент билан чақириш компиляция хатосига олиб келади, чунки компилятор турларни қандай равишда мослаштиришни аниқлай олмайди. Компиляторга қандайдир T турни Sinf турига олиб келиш зарурлиги ҳақида кўрсатмани бериш учун Sinf синфида
Sinf(T t);
конструкторини эълон қилиш керак. Бу ҳолда компилятор
func(t);
чақиришни
func(Sinf(t));
мазмунида қабул қилади ва хатолик рўй бермайди.
class Sinf
{
int x;
public:
Sinf();
Sinf(int); // int турини Sinf турига ўзгартириш Sinf(long); // long турини Sinf турига ўзгартириш
Sinf(double); // double турини Sinf турига ўзгартириш
int x_qiymati();
};
Sinf::Sinf(){x=0;}
Sinf::Sinf(int _x){x=_x;}
Sinf::Sinf(long _x){x=int(_x);}
Sinf::Sinf(double _x){x=_x;}
int Sinf::x_qiymati(){return x;}
void func(Sinf & ob_k)
{
cout<
}
int main()
{
func(10);
func(11L);
func(12.15);
Sinf sinf;
func(sinf); // аргумент турини ўзгаришга хожат йўқ
Do'stlaringiz bilan baham: |