Главная страница

ОББН лекция 2. Си программалау тіліне кіріспе Жоспар


Скачать 128.11 Kb.
НазваниеСи программалау тіліне кіріспе Жоспар
Дата06.08.2020
Размер128.11 Kb.
Формат файлаdocx
Имя файлаОББН лекция 2.docx
ТипПрограмма
#135233
страница6 из 11
1   2   3   4   5   6   7   8   9   10   11

Конструктор және деструктор



Объектілерді құру барысында программада өте жиі қоолданылатын операция ол объектінің элементтерін инициализациялау (алғашқы мән беру). Алдыңғы бөлімде қарастырғанымыздай элементтердің мәндерін өзгерту үшін кластың функциясы қолданылады. Кластың элементтерінің мәндерін инициализациялауды жеңілдету үшін C++ тілінде, конструктор деп аталатын, арнайы функция қолданылады, ол әрбір құрылатын объект үшін орындалады. Дәл осы сияқты C++ тілінде объектіні жою үшін, деструктор деп аталатын, арнайы функция қолданылады. Конструкторды әдетте объектілерді құруға көмектесетін функция, ал деструктор құрылған объектілерді жоятын функция ретінде қарастырады. Деструкторды қолданғаннан кейін объект алып тұрған жадыдағы орын азат етіледі.

Конструктор кластың тәсілі болып табылады, оның дәл класқа аттас атауы болады. Мысалы, егер класс атауы employee болса, онда конструктордың атауы да employee болуы тиіс. Егер программада конструктор анықталса, онда C++ оны автоматты түрде әрқашан объектіні құру барысында шақырады. Келесі программада employee атты класс құрылады. Программада осы аттас конструктор бар, ол объектіге алғашқы мән меншіктейді. Бірақ конструктор, void арқылы сипатталмағанына байланыссыз, ешқандай мән қайтармайды. Қайтарылатын мәннің типі көрсетілмейді:

class employee

{
public:
   employee(char*,long,float);//Конструктор
   voidshow_employee(void);
   intchange_salary(float);
   longget_id(void);
private:
   charname[64];
   longemployee_id;
   floatsalary;
};

Программада конструкторды кластың кезөкелген тәсілі сияқты анықтаймыз:

employee::employee(char *name, long employee_id, float salary)

{
   strcpy(employee::name,name);
   employee::employee_id=employee_id;
   if(salary<50000.0)
   employee::salary=salary;
   els//жалақыныңмәнідұрысемес
   employee::salary=0.0;
}

Көріп тұрғанымыздай, конструктор шақырылған функцияның мәнін қайтармайды. Онда void типі қолданылмайды. Бұл жағдайда конструктор кеңауқымды қолдану операторын және әрбір элементтің алдында класс атауын қолданады:

#include

#include

class employee

{
public:
   employee(char*,long,float);
   voidshow_employee(void);
   intchange_salary(float);
   longget_id(void);
private:
   charname[64];
   longemployee_id;
   floatsalary;
};

employee::employee(char *name, long employee_id, float salary)

{
   strcpy(employee::name,name);
   employee::employee_id=employee_id;
   if(salary<50000.0)
      employee::salary=salary;
   else//жалақының мәні дұрыс емес
      employee::salary=0.0;
}

void employee::show_employee(void)

{
   cout<<“қызметші:“<   cout<<“қызметшіномері:“<   cout<<“жалақысы:“<}

void main(void)

{
   employeeworker(“Арман”,101,10101.0);
   worker.show_employee();
}

Есте сақтаңыз, worker объектісін жариялағаннан кейін жай жақшалар жазылады және функцияда шақырылғандағыдай алғашқы мән беріледі. Конструкторды қолдану уақытында оған параметрді объектіні жариялағанда беру қажет:

employee worker(“Арман”, 101, 10101.0);

Егер программада employee типті бірнеше объект құру қажет болса, онда олардың әрөбіреуінің элементтерінің мәндерін конструктор арқылы беруге болады:

employee worker(“Арман”, 101, 10101.0);

employee secretary(“Азамат”, 57, 20000.0);

employee manager(“Айдос”, 1022, 30000.0);

3. Конструкторды қайта анықтау



C++ тілінде программада функция анықтамасын қайта жариялауға болатынын білеміз. Келесі программада employee конструкторын қайта анықтаймыз. Алғашқы конструктор программа қызметшінің атын, номерін және жалақысын беруді талап етсе, екінші конструктор егер програмада жалақының мәні көрсетілмесе соны енгізуді талап етеді:

employee::employee(char *name, long employee_id)

{
   strcpy(employee::name,name);
   employee::employee_id=employee_id;
   do

   {
      cout << name << "үшін жалқының мәнін енгіз" << " $50000 кіші: ";
      cin>>employee::salary;
   }
   while(salary>=50000.0);
}

Кластың ішінде, программада, екі конструктордың прототипі көрсетілуі тиіс:

class employee

{
public:
   employee (char *, long, float);|___қайта анықталатын функциялардың
   employee(char*,long);          прототиптері
   voidshow_employee(void);
   intchange_salary(float);
   longget_id(void);
private:
   charname[64];
   longemployee_id;
   floatsalary;
}

Төменде программа толығымен келтірілген:

#include

#include

class employee

{
public:
   employee(char*,long,float);
   employee(char*,long);
   voidshow_employee(void);
   intchange_salary(float);
   longget_id(void);
private:
   charname[64];
   longemployee_id;
   floatsalary;
};

employee::employee(char *name, long employee_id, float salary)

{
   strcpy(employee::name,name);
   employee::employee_id=employee_id;
   if(salary<50000.0)employee::salary=salary;
   else//жалақының мәні дұрыс емес
      employee::salary=0.0;
}

employee::employee(char *name, long employee_id)

{
   strcpy(employee::name,name);
   employee::employee_id=employee_id;
   do

   {
    cout << name <<" үшін жалақының мәнін бер " << " $50000 кіші: ";
   cin>>employee::salary;
   }
   while(salary>=50000.0);
}

void employee::show_employee(void)

{
   cout<<"қызметші:"<   cout<<"қызметшіномері:"<   cout<<"жалақысы:"<}

void main(void)

{
   employeeworker("Арман",101,10101.0);
   employeemanager("Азамат",102);
   worker.show_employee();
   manager.sbow_employee();
}
1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта