Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»


class X{    const X & operator=(const X & r)



Pdf көрінісі
бет364/642
Дата30.03.2022
өлшемі3,66 Mb.
#29231
түріПрограмма
1   ...   360   361   362   363   364   365   366   367   ...   642
Байланысты:
pavlovskaia-jogargy-dengeili

class X{

   const X & operator=(const X & r);

   ...

};

const X & X::operator=(const X & r){

   if(this != &r){           // Көшіру

   }

   return *this;

}

Конструкторларда өрістерге бастапқы мəндер беру үшін меншіктеу опе-

рациясын емес, инициалдауды қолдану ұсынылады:

class Х{

      string s; 

   public: 

      X(const char * str);

};

// Меншіктеуі бар конструктор нұсқасы: 

X::X(const char * str){ s = str; } 

// Инизиалдау қолданылған конструктор нұсқасы: 

X::X(const char * str): s(str){}

Инициалдау басқаларына қарағанда, əмбебап əрекет болып табылады, 

өйткені оның меншіктеуді пайдалануға болмайтын жағдайларда қолданылуы 

мүмкін (мысалы, тұрақтылық өрістерге немесе сілтемелерге мəндер беру 

кезінде). Сонымен қатар, ол тиімдірек жұмыс атқарады, себебі С++ тілінде 

объектіні құру оның өрістерін келісім бойынша конструктордың инициал-

дауынан басталады, содан кейін барып шақырылатын конструктор орында-

лады. Осылайша, қарастырылған мысалдың бірінші нұсқасы үшін келісім 

бойынша 

string

 класының конструкторы шақырылады да, тек содан кейін 

барып меншіктеу орындалады, ал екінші нұсқа керекті конструкторды 

бірден шақыруға мүмкіндік береді. Иерархия құрайтын күрделі кластар үшін 

келтірілген нұсқалар арасындағы айырмашылық айтарлықтай үлкен болады. 

Өрістердің инициалдануы олардың тізімдегі кездесу реттілігі бойынша 

емес, жариялану реттілігі бойынша жүзеге асырылатынын да ескеру керек. 

Сондықтан, мүмкін болатын қателіктер санын азайту үшін конструктордың 

инициалдау тізіміндегі өрістерді жазу реті олардың класта жариялану 

реттілігіне сəйкес келуі тиіс. 




263

Статикалық өрістер конструкторда инициалданбауы тиіс, себебі оларға 

бастапқы мəнді əрбір класс үшін тек бір рет меншіктеу керек, ал конструк-

тор кластың əрбір объектісі үшін орындалады. Статикалық өрістер ауқымды 

анықталу аймағында (кез келген функциядан тыс) инициалданады. 

Көшірме конструкторлары да өрістердің инициалдану тізімін қолдануы ке-

рек, өйткені базалық кластар жəне қабаттастырылған объектілер үшін келісім 

бойынша анықталған конструкторлар шақырылады:





Достарыңызбен бөлісу:
1   ...   360   361   362   363   364   365   366   367   ...   642




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет