Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Конструкторлар. Деструкторлар. Іштестірілген кластар. Жұмыстың мақсаты: конструктор көмегімен класс объектілерін құру және деструктор көмегімен жою






Жұ мыстың мақ саты: Конструктор кө мегімен класс объектілерін қ ұ ру жә не деструктор кө мегімен жою мү мкіндіктерімен таныстыру.

 

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";

}

}

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.