ҚР БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ
Қ. Жұбанов атындағы Ақтөбе мемелекеттік университеті
Информатика және ЕТ кафедрасы
050602 - «Информатика» мамандығы күндізгі бөлімінің
4-курс студенттеріне арналған
«OBP 4301 Объектіге бағытталған программалау» пәнінен
лабораториялық жұмыстарды жүргізуге арналған әдістемелік нұсқау
ЛАБОРАТОРИЯЛЫҚ ЖҰМЫС № 1-2
С++-ТЕГІ КЛАССТАР ЖӘНЕ ОБЪЕКТІЛЕР
Жұмыстың мақсаты: Класс құрылымымен, оны құрумен және қолданылуымен, класс мүшелерін сипаттаумен және оларды алу әдістерімен таныстыру.
Қысқаша теориялық мәліметтер
Кластар. Класс түсінігі
Класс – бұл қолданушы анықтайтын тип. Кластың сипатталуы Си тіліндегі структураның сипатталуына ұқсас. Date деген датаны және осы типті айнымалылармен жұмыс жасауға арналған функциялар жиынын анықтау үшін, struct типін қолданып дата түсінігінің жүзеге асырылуын қарастырайық:
struct date {
int month, day, year; // дата: айы, күні, жылы
void set(int, int, int);
void get(int*, int*, int};
void next();
void print();
// …
};
Осылайша сипатталған функциялар, функция-мүшелер деп аталады және структура мүшелеріне қатынау үшін стандартты синтаксистің көмегімен сәйкес типті айнымалы үшін ғана шақырылуы мүмкін. Мысалы:
date today; // бүгін
date my_burthday; // менің туған күнім
void f()
{
my_burthday.set(30,12,1950);
today.set(18,1,1985);
my_burthday.print();
today.next();
}
Әртүрлі струтураларда бірдей атты функция-мүшелер болғандықтан, функция-мүшені анықтаған уақытта структура аты көрсетілуі тиіс:
void date::next()
{
if ( ++day > 28 ) {
// жұмыстың күрделі бөлігін орындайды
}
}
Функция-мүшеде мүшелердің аттары объектке айқын сілтемеуі мүмкін. Бұл жағдайда аты объекттің функция шақырылған мүшесіне тиісті болады (жатады).
Date сипаттамасы date типті объектілермен жұмыс жасау үшін бірқатар функциялар ұсынады, бірақ бұл функциялар date типті объектілер үшін жалғыз болуы керек екендігін көрсетпейді. Бұл шектеуді struct орнына class типін қолданып қоюға болады:
class date {
int month, day, year;
public:
void set(int, int, int);
void get(int*, int*, int};
void next();
void print();
};
public: белгісі класс денесін екі бөлікке бөледі. Бірінші жабық бөліктегі атаулар тек функция-мүшелермен қолданылуы мүмкін. Екіншісі, ашық бөлігі класс объектісінің интерфейсін құрайды. Struct – бұл барлық мүшелері ашық болатын class, сондықтан функция-мүшелер жоғарыда көрсетілгендей қолданылады. Мысалы:
void date::print() // АҚШ-та қолданылатындай баспаға шығарады
{
cout << month << "/" << day << "/" year;
}
Мәліметтер құрылымына ену мүмкіндігі айқын сипатталған функциялар тізімімен шектелгендігінің бірнеше артықшылығы бар. Датаның мүмкін емес мәнді қабылдауының кез келген қатесі (мысалы, желтоқсан 36, 1985), функция-мүше кодымен шақырылуы керек, сондықтан өңдеудің бірінші сатысы, локализация, программа орындауға жіберілмес бұрын орындалады. Бұл date типіндегі кез келген өзгеріс оның мүшелеріндегі өзгерістерден тәуелді деген жалпы тұжырымның дербес жағдайы. Тағы бір артықшылығы – осы типті қолдануды үйрену үшін, функция-мүшелердің анықтамасын ғана білу жеткілікті болады.
Жабық мәліметтерді қорғау қажеттілігі класс мүшелерінің аттарын қолдануды шектеумен байланысты. Функция-мүшеде объект мүшелеріне тікелей сілтеуге болады. Мысалы:
class x {
int m;
public:
int readm() { return m; }
};
x aa;
x bb;
void f()
{
int a = aa.readm();
int b = bb.readm();
// …
}
member() мүшесін бірінші рет шақырғанда m aa.m-ге тиісті болады, ал екіншісінде - bb.m-ге.
Функция-мүше шақырылған объектке көрсеткіш функцияның жасырын параметрі болып табылады. Бұл айқын емес параметрге this-ге сияқты сілтеуше болады. х класының әрбір функциясында this көрсеткіші айқын емес түрде сипатталады
x* this;
және функция-мүше шақырылған объектке сілтейтіндей инициализацияланады. this айқын түрде сипатталуы мүмкін емес, өйткені ол кілттік сөз. x класы эквивалентті түрде былай сипатталуы мүмкін:
class x {
int m;
public:
int readm() { return this->m; }
};
Достарыңызбен бөлісу: |