![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Конструкторлар. Деструкторлар. Іштестірілген кластар. Жұмыстың мақсаты: конструктор көмегімен класс объектілерін құру және деструктор көмегімен жою
Жұ мыстың мақ саты: Конструктор кө мегімен класс объектілерін қ ұ ру жә не деструктор кө мегімен жою мү мкіндіктерімен таныстыру.
I. Қ ысқ аша теориялық мә ліметтер Класс объектісін инициализациялауды қ амтамасыз ету ү шін set_date() (датаны тағ айындау) сияқ ты функцияларды пайдалану қ ате болуы мү мкін. Ө йткені ешқ андай жерде объект инициализациялануы керек деп айтылмағ ан, сондық тан программист оны ұ мытып кетуі немесе екі рет инициализациялап кетуі мү мкін. Бұ дан да тиімді жолы бар: программистке объектілерді инициализациялау ү шін арналғ ан функцияны сипаттау мү мкіндігін беру. Бұ ндай функция берілген типті мә нді қ ұ растыратын болғ андық тан, ол конструктор деп аталады. Конструктор аты класс атымен сә йкес келеді. Мысалы:
class date { // … date(int, int, int); };
Класта коснтруктор болса, осы кластың барлық объектілері инициализацияланады. Конструктор ү шін параметрлер керек болса, олар берілуі тиіс:
date today = date(23, 6, 1983); date xmas(25, 12, 0); // қ ысқ артылғ ане формасы date my_burthday; // мү мкін емес, // инициализацияланбайды
Класс объектілерін инициализациялаудың бірнеше ә дісін қ амтамасыз еткен дұ рыс болады. Оны бірнеше конструктордың кө мегімен жү зеге асыруғ а болады. Мысалы:
class date { int month, day, year; public: // … date(int, int, int); // кү ні айы жылы date(char); // жолдық тү рде берілген дата date(int); // бү гінгі кү н, ай жә не жыл date(); // ү нсіз жағ дайдағ ы дата: бү гін };
Конструкторлар параметрлер типіне қ атысты қ айта анық талатын функциялар сияқ ты ережелерге бағ ынады.
date today(4); date july4(" Июль 4, 1983"); date guy(" 5 Ноя"); date now; // ү нсіз жағ дайда инициализацияланады
Туыс функциялар санын қ ысқ артудың бір ә дісі – ү нсіз жағ дайдағ ы мә ндері бар параметрлерді қ олдану.
class date { int month, day, year; public: // … date(int d =0, int m =0, int y =0); date(char); // жолдық тү рде берілген дата }; date:: date(int d, int m, int y) { day = d? d: today.day; month = m? m: today.month; year = y? y: today.year; // мү мкін болатын дата екендігін тексеру // … }
Қ олданушы анық тайтын типте инициализацияны жү зеге асыратын конструктор жиі болады. Кө птеген типтер ү шін кері ә рекетті, яғ ни объектілерді жою ү шін деструкторлар қ ажет болады. X класының деструктор аты ~X() («конструктор толық тауышы»). Кө птеген типтер конструктормен бө лінетін жә не деструктормен босатылатын бос жадының қ андай бір бө лігін қ олданады.
// First класымен жұ мыс жасайтын 1 программа
// Файл FIRST.H #include < stdio.h> #include < iostream.h> class First { private: int field1; // First класына енуді есептейді float field2, field3; void setField1(int anInt) { field1 = anInt; } public: // Конструкторлар мен деструкторлар First(void) { cout < < " \nIn void constructor for First"; setField1(0); field2 = 0.0; field3 = 0.0; } First(float aField2, float aField3 = 0.0) { cout < < " \nIn 2-parameter constructor for First"; setField1(0); field2 = aField2; field3 = aField3; } ~First(void) { cout < < " \nIn destructor for First"; } // Ену ә дістері int getField1(void) { return ++field1; } float getField2(void) { field1++; return field2; } float getField3(void) { field1++; return field3; } void setField2(float aFloat) { field1++; field2 = aFloat; } void setField3(float aFloat) { field1++; field3 = aFloat; } void resetField1(void) { setField1(0); } // Ө рістерге қ олданылатын амалдар int compareFields(void) { field1++; return field2 == field3; } // Баспа ә дістері void print(void) { char buffer[40]; field1++; // Баспа да ену болып табылады cout < < " \n Number of accesses to this object = " < < field1; sprintf(buffer, " \n Value of field2 = %.2f", field2); cout < < buffer; sprintf(buffer, " \n Value of field3 = %.2f", field3); cout < < buffer; } };
// Файл FIRST.CPP // First класы ү шін тесттік программа #include " first.h" void main() { char buffer[40]; First first1, first2(10.25), first3(12.6, -5.6); cout < < " \n\nTest program results for class First\n"; cout < < " \nPrint details of first1"; first1.print(); cout < < " \nPrint details of first2"; first2.print(); cout < < " \nPrint details of first3"; first3.print(); cout < < " \n\nModify fields of first2 and verify"; first2.setField2(15.8); first2.setField3(-8.0); first2.print(); cout < < " \n\nAccess field2 and field3 of first1"; sprintf(buffer, " \n field2 = %.2f", first1.getField2()); cout < < buffer; sprintf(buffer, " \n field3 = %.2f", first1.getField3()); cout < < buffer; cout < < " \n\nReset and print first3"; first3.resetField1(); first3.print(); cout < < " \n\nCompare field2 and field3 of first1"; if(first1.compareFields()) { cout < < " \n field2 = field3\n"; } else { cout < < " \n field2! = field3\n"; } }
|