Дістемелік кешен


Лабораторялық жұмыс бойынша сұрақтар



бет61/112
Дата22.12.2021
өлшемі0,85 Mb.
#127596
түріПрограмма
1   ...   57   58   59   60   61   62   63   64   ...   112
Байланысты:
ооп лекция

Лабораторялық жұмыс бойынша сұрақтар




  1. Класс дегеніміз не? Си-дегі класс аналогін келтіріңіз. Класстар не үшін сипатталады?

  2. Структурадан класстың айырмашылығы неде?

  3. Не үшін класс мүшелері 3 ену облысына бөлінеді?

  4. Класс экземпляры деген не?

  5. Кластың мүше-мәліметтерін және мүше функцияларын қалай шақыруға болады?

ЛАБОРАТОРИЯЛЫҚ ЖҰМЫС № 3

КОНСТРУКТОРЛАР. ДЕСТРУКТОРЛАР. ІШТЕСТІРІЛГЕН КЛАСТАР.
Жұмыстың мақсаты: Конструктор көмегімен класс объектілерін құру және деструктор көмегімен жою мүмкіндіктерімен таныстыру.


  1. Қысқаша теориялық мәліметтер

Класс объектісін инициализациялауды қамтамасыз ету үшін 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

#include

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

}

}




  1. Достарыңызбен бөлісу:
1   ...   57   58   59   60   61   62   63   64   ...   112




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

    Басты бет