![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Кластар. Класс түсінігі
Класс – бұ л қ олданушы анық тайтын тип. Кластың сипатталуы Си тіліндегі структураның сипатталуына ұ қ сас. 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; } };
|