С тіліндегі кластар және олардың түрлері



Батыс Қазақстан инженерлік-технологиялық университеті

КУРСТЫҚ ЖҰМЫС
Тақырыбы:
С++ тіліндегі кластар және олардың түрлері

Орындаған:
Тексерген:

Орал, 2012ж.

Мазмұны

Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ... ... ... ... ... ...3
1 бөлім. СС++ тіліндегі кластар және олардың түрлері
1.1. Си тіліндені
кластар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... 5
1.2. Келісім бойынша көшірме
конструкторы ... ... ... ... ... ... ... ... ... ... ... ... ... ...8
1.3. Құрылымдар және
кластар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ...10
2 бөлім. Си тіліндегі кластар, объектілер және жады
2.1. Кластың статикалық
берілгендері ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
15
2.2. Класс өрістерінің жеке-жеке жариялануы
және
анықталынуы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ...17
2.3. Кластар
иерархиясы ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... .19
Қорытынды ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ... ... ... ..25
Пайдаланылған әдебиеттер
тізімі ... ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ... ..
..27

Кіріспе
Қазіргі кездегі программалау тілінің арасында ең көп тараған тілдердің
бірі Си универсалды программалау тілі. Бірақ оны системалық программаларда,
транслятор, операциялық системаларды жазуда қолдану жақсы жетістіктер
береді. Си программалау тілін 1972 жылы Bell laboratories фирмасының
қызметкері Денис Ритчи ойлап тапты. Тіл системалық программаларға арналған
деп саналғанымен оның мүмкіндігінің өте үлкен болғандықтан оны қолданады,
программаларды жазуға да пайдалануға болады.
Си тілінде жазылған программаның архитиктуралары әр түрлі
компьютерлердің бірінен бірін ауыстыруға бір операциялық системаның екінші
операторлық системаға ауыстыруға жеңіл. Сонымен қатар Си тіліндегі
программалардың орындалу жылдамдығы ассемблер тіліндегі программалардан кем
емес. Си тілінің компиляторы қазіргі кездегі барлық операциялық жүйеде
жұмыс істей береді. Unix, MSDOS, WINDOWS.Барлық объектілі бағытталған
программалау тілдерінің ішінде ең кең таралған С++ тілі. Осы бағытта соңғы
пайда болған Java тілінің С++ тілімен салыстырылғанда келесі кемшіліктері
бар: көрсеткіштер, шаблондар, бірнеше қайтара мұрагерлік Java тілінде
қарастырылмаған. Барлық синтаксис жағынан бұл тілдер ұқсас.
Қазіргі таңда Microsoft және Borland компаниялары құрған С++ тілінің
Microsoft Windows жүйесінде программалау ортасы көп тараған.
Объектілі бағытталған программалау үш тұжырымға негізделген: кластар,
мұрагерлік және полиморфизм.
Процедуралық тілдерде жазылған программалар негізінен инструкциялар
жиынтығы болып табылады. Бұл тілдердегі программалар функциялардан тұрады,
олар тізбектелген іс-әрекеттер тізімін орындайды.
Бірнеше функцияларды модульдерге біріктіруге болады, бірақ сонда да
процедуралық принцип сақталады.
Процедуралық тілдерде екі түрлі берілгендер типтері бар: жергілікті
(локальді) және кең ауқымды (глобальді). Жергілікті берілгендер тек
функциялардың ішінде және тек сол функцияларда ғана қолданылады, ал барлық
функцияларда қолдану керек болса кең ауқымды етіп жариялайды.
Курстық жұмыстың мақсаты: Си бағдарламалау тіліндегі кластар туралы
түсінік алу. Алгоритмдеу және программалау тілінен алынған білімді
қорытындылау.
Курстық жұмыстың міндеттері: СС++ бағдарламалау тілі туралы және си
тіліндегі кластар мен олардың түрлері туралы толық мағлұмат беру. СИ
тілінің мүмкіндіктерімен таныстыру.
Курстық жұмыстың құрылымы: курстық жұмыс кіріспеден, екі бөлімнен және
қорытынды мен пайдаланылған әдебиеттерінен тұрады.
1 бөлім. СС++ тіліндегі кластар және олардың түрлері
1.1. Си тіліндені кластар
Кластар объектілер қандай берілгендер мен функциялардан тұратындығын
анықтайтын форма болып табылады. Класты жариялау барысында ешқандай объект
құрылмайды, мысалы int типі int айнымалының бар екендігін білдермейтін
сияқты. Яғни класс өзара ұқсас объектілер жиынтығын сипаттау үшін қажет
ұғым.
Класқа тиісті объекті кластың экземпляры деп аталады.
Класс ұғымы мұрагерлік ұғымына алып келеді.
С++ тілінде басқа кластарды анықтайтын класты негізгі класс деп
атайды. Қалған кластар, оның қасиеттерін мұрагерлікке алады да, өздерінің
қосымша басқа қасиеттерін қабылдайды. Оарды туынды класстар деп атайды.
Құрылған класс басқа программаларда да қолданылуы үмкін. Бұл қасиет класс
кодын қайталап қолдануға мүмкіндік береді.
Полиморфизм және асыра жүктеу. Операциялар мен функциялардың олардың
қолданып тұрған шамалардың типтеріне байланысты әр түрлі қызметтерді
атқаруы полиморфизм деп аталады. Егер, мысалы, +, = операцияларын басқа
жаңа типті операндалармен жұмыс істеу мүмкіндіктерімен қматамасыз етсек,
онда бұл операцияларды асыра жүктелген операциялар деп атайды.
Айнымалы өз типіне қандай қатынаста болса, объект те өз класына сондай
қатынаста. Класс анықтамасы class қызметші сөзінен басталып, класс есімі
жазылады. Құрылым сияқты, класс денесі фигуралық жақшаға алынып, нүктелі
үтір белгісімен аяқталады.
ОБП –дың негізгі ерекшелігі берілгендерді жасыра алуы.
Бұл терминнің мағынасы мынада: берілгендер класс ішінде орналасқан
және кластан тыс орналасқан функциялардың санкциясыз қолданылуынан
қорғалған. Егер кейбір берілгендерді қорғау керек болса, онда оларды
private қызметші сөзі бар класс бөлігінде орналастыру керек. Мұндай
берілгендер тек класс ішінде ғана қолданылады. Public қызметші сөзімен
сипатталушы берілгендер кластан тыс та қолданылады.
Кластың ішінде қолданылады (жабық)
Кластан тыс (ашық) қолданылады
Класс құрамына кіретін функциялар класс әдістері болып табылады.
Класс ішіндегі берілгендер мүшелер немесе класс өрістері деп аталады.
Объект есімін класс әдісімен байланыстыру үшін нүкте (.) операциясын
қолданады.
Нүкте операциясы класс мүшесін алу операциясы деп аталады.
Кейбір объектілі бағытталған программалау тілдерінде объект әдісін
шақыруды хабарламалар деп атайды.
Конструкторларда бірнеше ерекшеліктер бар. Біріншіден, конструктор аты
класс атымен дәл сәйкес келеді. Екіншіден, конструкторда қайтарылушы мәні
болмайды. Бұл конструктордың жүйе арқылы шақырылатындығымен түсіндіріледі.
Яғни конструктордың мәнді қайтаратын программа немесе функцияның
болмайтындығын көреміз. Конструктордың қызметі – класс объектісінің
өрістерін инициализациялау. Конструкторда инициализация әдіс прототипі мен
функция денесінің арасында орналасқан және қос нүктемен ажыратылады.
Инициализацияланатын мән өріс есімімен кейінгі жақшада орналасқан.
Егер класс өрістерінің бірнешеуін инициализациялау керек болса, онда
мәндер үтірмен бөлініп, инициализация тізімі құрылады.
Объект құрыларда ерекше класс әдісі – конструктор шақырылады.
Объектіні жоюда автоматты түрде шақырылатын әдіс деструктор деп аталады.
Деструктор есімі конструктор есімімен сәйкес келеді және есім алдында ~
тильда белгісі қойылады. Объектілерді бірнеше тәсілмен жоя алмайтындықтан
деструкторлар мәндерді қайтармайды және аргументтері болмайды. Жаңа объект
құрылыу кезінде қанша аргумент қолдануына байланысты қай конструктор
орындалатындығы анықталады.
Класс ішінде класс әдісінің анықталуы міндетті емес. Класс
анықтамасының ішінде тек add_dist ( ) функциясының прототипі бар.
Функияның анықтамасы листингтің басқа жерінде болса да, ол класс әдісі
болып табылады. add_dist ( ) функциясы Distance класынан кейін анықталады.
add_dist ( ) функциясының есімі анықталарда Distance класының есімі және :
: символы тұрады. Бұл белгі кең ауқымды келісім операциясының белгісі болып
табылады. Әдістің кластың сыртында анықталу форматы:
Қайтарылатын_мәннің_типі класс_есімі : : функция_есімі
{ }
: :-келісім операциясы.
Объектілерді функцияға берілу синтаксисі жай айнымалыларды беру
синтаксисімен бірдей. Бірақ мынадай маңызды бөліктері бар:
- Класс әдісіне әруақытта класс өрістерін қолдануға мүмкіндік бар
(объект (.) операциясы арқылы әдіспен байланысады).
- Класс әдісін басқа да объектілер қолдана алады. Олар оның аргументі
түрінде қарастырылады.
Класс әдісінің әрбір шақырылуы осы кластың белгілі бір объектісімен
байланысты (статикалық функцияны шақырудан басқа). Әдіс объектінің кез
келген, ашық және жабық мүшелерін есімі арқылы тікелей ала алады. add_dist
( ) функциясы мәндерді қайтармайды. Қайтарылатын мәннің типі void болып
табылады. Нәтиже автоматты түрде dist3 объектісіне меншіктеледі.
dist3 dist3 әдісі оның берілгендерін тікелей ала алады
dist3. aad_dist (dist1, dist2)
dist1 dist2
dist1. feet dist2. feet
dist1. inches dist2. inches

1.2. Келісім бойынша көшірме конструкторы

Бұған дейін объектіні инициализациялаудың екі тәсілін қарастырдық.
Аргументсіз конструктор объект өрістерін тұрақты мәндермен инициализациялай
алады, ал ең болмағанда конструктордың бір аргументі болса өрістерді
мәндермен инициализациялай алады.
Өрістерінің мәні анықталған объектіні қолданып объектіні
инициализациялаудың үшінші түрі бар. Әрбір класты құратын компилятор үшін
келісім бойынша көшірме конструкторы беріледі. Көшірме конструктордың бір
ғана аргументі болады және конструктор сияқты сол кластың объектісі болып
табылады.
ecopycon. cpp
# include
class Distance
{ private:
int feet;
float inches;
public:
Distance ( ) : feet (0) , inches (0.0)
{ }
Distance ( int ft , float in ) : feet (ft) , inches ( in)
{ }
void getdist ( )
{
cout ” \ n футты енгізіңіз= “ ; cin feet;
cout “ \ n дюймды енгізіңіз = “; cin inches ;
}
void showdist ( )
{
cout feet };
int main ( )
{ Distance dist1 (11, 6.25);
Distance dist2 (dist1);
Distance dist3 = dist1;
cout ”\n dist1 = “ cout ”\n dist2 = “ cout ”\n dist3 = “
cout return 0;
}
dist2, dist3 объектілері келісім бойынша көшірме конструкторының
көмегімен екі тәсілмен алынған.

1.3. Құрылымдар және кластар
Құрылымдарды класс ретінде де қолдануға болады. Құрылым мен кластың
формальды айырмашылығы мынада: келісім бойынша кластың барлық мүшелері
жасырын болады, ал құрылымның барлық мүшелері ашық болады.
рrivate қызметші сөзін класс мүшелері үшін көрсету міндетті емес:
class foo class foo
{ private: { int data1;
int data1; public:
public: void func ( );
void func ( ); };
};
Құрылым үшін public қызметші сөзі келісім бойынша беріледі.
struct foo
{ void func ( );
private:
int data1;
};
Программистер құрылымды берілгендерді біріктіру үшін, ал кластарды
берілгендер мен функцияларды біріктіру үшін қолданады.
Файларалық айнымалылар. Алдымен жариялаумен анықтаудың арасындағы
айырмашылықты қарастырайық. Жариялау барысында жай анымалының типін және
есімін көрсетеміз. Жариялау барысында бірден жадыдан орын бөлінбейді.
Айнымалыны анықтау барысында ғана жадыдан орын бөлінеді. Яғни анықтау
барысында ғана нақты айнымалы құрылады.
Бірақ көпшілік жариялаулар бір мезгілде анықтаулар да болып келеді.
Тек жалғыз ғана extern сөзі қолданылған жариялау анықтау болып
есептелмейді, яғни бұл сөзбен сипатталған жариялау үшін жадыдан орын
бөлінбейді.
int sv; — жариялау және анықтау
extern int v; — тек қана жариялау.
Глобальді айнымалы программа бірнеше файлдардан тұрса да, бір ғана
рет анықталынуы қажет. Программа А және В файлдарынан тұрсын.
Файл А
int globv; — А файлында анықтау
Файл В
int globv; — қате жариялау.
Егер келесі түрде жазсақ, олда қате болады:
Файл А
int globv; — А файлында анықтау
Файл В
globv=3; — қате, себебі В файлында А файлындағы анықтау көрінбейді.
Бұл қателерді extern сөзін қолдану арқылы жоя аламыз.
Файл А
int globv; — А файлында анықтау
Файл В
extern int globv; — extern сөзі бұл тек жариялау екендігін көрсетеді.
Жадыдан
globv=3; орын бөлінбейді. А файлындағы globv айнымалысы В
файлында да көрінеді.
еxtern жариялауында бірден инициализациялауға болмайды.
Егер әртүрлі файлдарда бірдей есімді глобальді айнымалылырды қолдану
керек болса, онда оларды static қызметші сөзінің көмегімен сипаттау керек.
Ол кезде глобальді айнымалының көріну облысы файлдың көлемі болады, яғни
сондай есіммен басқа айнымалыларды (жадыда бөлінген орындар) өзге файлдарда
қолдана беруге болады.
Файл А
static int globv; — тек А файлында көрінеді
Файл В
static int globv; — тек В файлында көрінеді
const сөзінің көмегімен сипатталған айнымалы тек сол файлда ғана
көрінетіндігін білеміз. Бірақ оны басқа файлдарда да көрінетін етуге
болады. Ол үшін extern сөзін қолдану керек.
Файл А
еxtern const int с=99; (анықтау)
Файл В
еxtern const int с; — жариялау. В файлында А файлында анықталған с
көрінеді.
Функцияны жариялау дегеніміз оның есімін, қайтаратын типін және
аргументтерінің типтерін көрсету. Анықтау дегеніміз – ол жариялау және
функияның коды. Сондықтан функцияларды бір файлда анықтап, басқа файлдарда
жариялап, содан соң шақыра беруге болады.
Файл А
int add(int a, int b) – функцияны анықтау
{return a+b;}
Файл В
int add(int, int); — функцияны жариялау
... ... ... ... ...
int d=add(2,3); — функцияны шақыру
Бұл жағдайда extern сөзінің қажеті жоқ. Айнымалылар сияқты функцияны
да басқа файлда көрсетпеуге болады.
Файл А
static int add(int a, int b) — функцияны анықтау
{return a+b;}
Файл В
static int add(int a, int b) — басқа функция
{return a+b;}
Файларалық кластар
Кластың жай айнымалыдан өзгешелігі, класты анықтау жадыдан орын бөлуді
білдірмейді. Ол тек класқа нелер кіретіндігін, яғни құрамын көрсетеді.
Сондықтан кез келген файлдан класты көру үшін әр файлда класты қайта
анықтау керек.
Көптеген компиляторлар көпфайлды қосымшаларды басқарады, оларды
проекттер деп атайды. Файлдарды біріктіру жөнінде ақпарат арнайы файлда
сақталады. Ол проект файлы деп аталады. Microsoft ортасында проекттінің
кеңеймесі .DSP болады. Проект файлы автоматты түрде жаңарып отырады.
Негізгі және тақырыптық файлдар компиляцияланып, .OBJ және .LIB файлдары
біріктіріліп орындалатын .EXE файлы құрылады.
Тақырыптық файлда класты қайталанып анықталуынан қорғау үшін файлды
келесі препроцессор директивасынан бастау керек:
#if !defined (My_cl) — егер My_cl лексемасы анықталмаса
#define My_cl — оны анықтау
... ... ... — класты анықтау
#endif — директиваның шартын жабу
Бұл әдісті тақырыптық файлды негізгі файлдарға бірнеше рет қосу керек
болған жағдайларда қолдану қажет.
Көпфайлды проектіні құру алгоритмі:
1. Projects - Win 32 Console Application
2. Проект есімін енгізу
3. File - New - Files
4. ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
C# Тілінің негіздері
Кластар иерархиясы
СИ бағдарламалау тілінде жадыны басқару
Көшіріп алу конструкторы
Объектіге бағытталған программалаудың принциптері
Delphi тілінде деректер модулін құрастыру және оны пайдалану
Кафедраның тәрбие жұмысына бағытталған мобильді қосымшаның сервері
Delphi-де қазақша - ағылшынша сөздік жасау
Массивтер. Деректердің стандартты типтері
С++ тілі және оның мүмкіншіліктері
Пәндер