С++ бағдарламалау тілі

0
19910
Ұлттық салт-дәстүрлерді насихаттаудың тәрбиелік мәні.

МАЗМҰНЫ

КІРІСПЕ

НЕГІЗГІ БӨЛІМ

  1. С++ тілінің шығу тарихы
  2. С ++ тілінің ерекшеліктері
  3. С ++ тіліндегі класстар

ҚОРЫТЫНДЫ

ҚОЛДАНЫЛҒАН ӘДЕБИЕТТЕР ТІЗІМІ

Кіріспе

С++ тілінің синтаксистік ережелері басқа тілдерге қарағанда аз,оның компиляторын 256 Кб көлем арқылы-ақ жазып шығуға болады.

Қордағы түйінді сөздер саны да көп емес, Дэннис Ритчи жасаған алғашқы С++ тілінде тек 27 түйінді сөз болды,кейіннен ANSI C стандартында тағы бірнеше сөз қосылды.

Microsoft С/С++ нұсқасында тағы 19 командалар мен түйінді сөздер қосылды,соның нәтижесінде олар 66 болды.

Басқа программалау тілдердегі функциялар С++ тілінде жоқ,мысалы,енгізу-шығару операторлары да кездеспейді, оның есесіне кітапханалық әр түрлі функциялар саны жеткілікті.

С ++ тілінде қазіргі тілдерде болатын барлық басқару операторлары бар.

Курстық жұмыстың мазмұны кіріспе, негізгі бөлім, қорытынды, пайдаланған әдебиеттерден тұрады. Негізгі бөлім үш тақырыптан тұрады: С++ тілінің шығу тарихы, С++ тілiнің ерекшеліктері, C ++ тіліндегі класстар.

Курстық жұмыстың мақсаты: С ++ тіліндегі класстарды кеңінен ашып, түсінікті етіп көрсету.

C++ тілінде бағдарламалаушы берілгендердің бос типтердің енгізу мен класстар арқылы орындалатын операцияларды анықтау мүмкіндіктеріне ие.

Класс – бұл бар типтер негізіндегі туынды құрылымы бар (структурированный) тип. Класс компонеттері деректер, функциялар, класстар, санап шығулар, биттік өрістер, достасқан функциялар мен типтер атаулары бола алады.

С++ тілінің шығу тарихы

С++ тілінің шығуы UNIX операциялық жүйесімен тығыз байланысты, өйткені бұл ОС осы С тілінде жазылып шыққан. UNIX/C жұмыс істеу ортасы Си тілін жүйелік программалау тілі ретінде елге таныстырды,ол компиляторлар мен ОС-тер жазу үшін қолайлы деп саналады. Бірақ Си тілі кез келген салада программалар жазуға да өте қолайлы тіл болып табылады.

Алғаш рет UNIX 1969 жылы Нью-Джерси штатындағы Белл фирмасының лабораториясында PDP-7 мини-ЭЕМ-інде жасалып шықты. UNIX PDP-7 компьютерінің ассемблер тілінде жазылды.Бұдан соң сол лабораторияның жетекшісі Кен Томпсон 1970 жылы В деп аталған жаңа тілге арнап компилятор жасап шықты. Осы тілді Си тілінің негізі деп атауға болады. Жалпы Си тілінің даму жолына қарасақ;

Алгол-60 1960-жылдың басында халықаралық комитет басып шығарды

CRL (Combined Programming Language) Кембриджде және Лондон университетінде 1960 ж.қатарласа жасалды.

BCPL (Basic Combined Programming Language) Кембриджде Мартин Ричардс 1967 ж. жасап шығарды.

В Bell Labs қызметкері Кен Томпсон 1970 жылы жасады

С Bell Labs қызметкері Дэннис Ритчи 1972 жылы жасады

Сонымен,1983 жылы С++ тілінің стандартын жасау мақсатында (ANSI C) Америка Ұлттық стандарттар институты (ANSI) құрылды.

С++ тілінің ерекшеліктері

Көлемінің шағындығы

С++ тілінің синтаксистік ережелері басқа тілдерге қарағанда аз,оның компиляторын 256 Кб көлем арқылы-ақ жазып шығуға болады.Мұндағы операциялық әрекеттер,олардың комбинациясы жетерлік,бірақ қордағы түйінді сөздер саны да көп емес, Дэннис Ритчи жасаған алғашқы С++ тілінде тек 27 түйінді сөз болды,кейіннен ANSI C стандартында тағы бірнеше сөз қосылды.

Тілдің командалар жиыны

Microsoft С/С++ нұсқасында тағы 19 командалар мен түйінді сөздер қосылды,соның нәтижесінде олар 66 болды.

Басқа программалау тілдердегі функциялар С++ тілінде жоқ,мысалы,енгізу-шығару операторлары да кездеспейді, оның есесіне кітапханалық әр түрлі функциялар саны жеткілікті.

Жылдам істейтіндігі

С++ компиляторлары жасаған программа кодтары шағын,әрі жылдам істейді,оның үстіне тілдің аппараттық құралдарға жақындығы ассемблер тіліменен қатар жылдамдықпен жұмыс істеуге мүмкіндік береді.

Типтері де күрделі емес(Язык со слабой типизацией)

Паскальға қарағанда,мәліметтерді типтендіру мұнда төменгі деңгейде ,ол типтерді бір-біріне жеңіл ауыстырады.Мұндай қасиет В тілінен келді.Мысалы,программаның бір жерінде айнымалы символдық болса,ал басқа жерде оны символдың

ASCI –коды (одан 32-ні алып) ретінде қарастыруға болады.

Құрылымды тіл болғандығы(Структурированный язык)

С++ тілінде қазіргі тілдерде болатын барлық басқару операторлары бар. 1971 жылдың өзінде-ақ жаңа ғана жасалған С++ тілі алғашқы құрылымдық программалау тілі ретінде танылған еді.Мұнда;for – цикл операторы, if және if-else конструкциясы, таңдау операторы (switch) және while циклы да бар.

Модульдік программалауды сүйемелдеуі

С++ тілінде жеке компиляциялау мен біріктіруден құралатын модульдік программалау концепциясы пайданылады.Мұнда тек программаның өзгертілген бөліктерін жеке компиляциялау мүмкіндігі бар.

Екілік разрядтағы өңдеуі

Жүйелік программалауда екілік разрядтарды өңдеу ісі жиі кездеседі.Әрине, UNIX операциялық системасымен тығыз байланыста пайда болған С++ тілінің екілік сандармен жұмыс істеу мүмкіндіктері өте зор.

Нұсқаушы айнымалылар

Операциялық жүйе тіліне қойылатын тағы бір талап — ол жады аймақтарын адрестеу мүмкіндігінің болуы. Мұндй мүмкіндік программа орындалуын жылдамдатады. С++ тілінде мұндай істі нұсқаушылар (указатели) атқарады және олармен арифметикалық амалдарды орындауға болады.

Құрылымы икемді тіл

С++ тіліндегі барлық массивтер — бір өлшемді. Көп өлшемді массивтер осы бір өлшемді массивтерден құрылады. Массивтер мен құрылымдар (жазбалар) бір – бірімен керекті түрде байланысып, мәліметтер базасын құрайды.

С++ тіліндегі класстар

С++ тілінде бағдарламалаушы берілгендердің бос типтердің енгізу мен класстар арқылы орындалатын операцияларды анықтау мүмкіндіктеріне ие.

Класс – бұл бар типтер негізіндегі туындықұрылымы бар (структурированный) тип. Класс ең оңай әдіспен келесі конструкция арқылы анықтауға болады:

Класс_кілті класс_аты{компоненттер тізімі};

Мұнда класс_кілті – class, struct,union қызметші сөздерінің бірі;

класс_аты еркімен таңдалатын идентификатор;

компоненттер тізімі клссқа қатысты функциялармен типтелген берілгендерді сипаттаушылар мен анықтамалары. Компоненттер объект күйін және класс объектісінің тәртібін шартқа негіздейді. Класс компонеттері деректер, функциялар, класстар, санап шығулар, биттік өрістер, достасқан функциялар мен типтер атаулары бола алады. Мысалы:

Class Classid

{ int k; // k, x, y жабық мүшелер – үнсіздік бойынша берілгендер

double x,y;

public: char lit,ch; // lit,ch ашық мүшелер деректер

int f3(int, int); // класстың ашық әдістері

int Get x (void) // класстың орнына қою әдісі

{return x;}

private:

void f1 (void); // жабық мүшелер – класс әдістері

int f2(int);

};

Қатынау спецификаторлары public: және private: қатынау спецификаторлары класс мүшелеріне өтуге мүмкіндік беретін режимді анықтайды: private – класс мүшелерін жабыққы айналдырады, ал public – ашық. Класстың жабық мүшелеріне тек берілген класс мүшелерінің қатынауға рұқсаты бар, сонымен қатар функциялардың – класс достары. Класстың ашық мүшелеріне кез келген функциялардың қатынауға мүмкіншіліктері бар.

Олар бар болып табылатын бағдарлама мен класс объектілерінің байланысы үшін арналған. Классты жобалап отырып, оның қай мүшесін ашық, ал қайсысын жабық етуді мұқият ойластырған жөн. Көптеген жағдайда класс анықтамасы блокта локализацияланбаған, және класс атауының іс — әрекет облысы бүкіл файл болып табылады.

Жай класстық әдістерін анықтау класс анықтамасының ішінде болуы мүмкін және мұндай жағдайда олар автоматты түрде орын ауыстырғандар болып табылады. Орын ауыстыратын функцияларды егер функция қарапайым және қысқа болса, қолданған жөн, мысалы Get x () фукциясы.

Әдетте, қауіпсіздікті жоғарлату мақсатымен классты мүше берілгендерін жалпыға бірдей рұқсат етілмейтін етеді және еркін бағдарлама ортасынан олармен тікелей байланысуға болмайды. Бірақ оған қарамастан олармен класстың барлығына рұқсат етілгенәдістерін қолданып ерікті бағдарламалық ортадан да жұмыс істеуге болады (public:). Жоғарыда қарастырылған мысал үшін келесі әдіс қолданылады:

int Get x (void)

return x;

жабық мүше мәнін берілген х қайтарады.

Арнайы түрде мұндай әдістердің «жүдеу» денелерін тиімділікті жоғарлату үшін орын ауыстырушы етіп класс анықтамасының ішінде енгізеді. Класс анықтамасынан тыс орналастыратын әдістерді анықтаған жағдайда әдістер тақырыбына inline спецификаторы қосылады.

«Клиент – сервер» технологиясы бойынша класс әдістерін анықтау класс анықтамасынан тыс орналастырған жөн. Көру облысының «::» рұқсат ету операторы арқылы компиляторға берілген анықталатын әдіс қандай классқа қатысты екендігін хабарлайды, мысалы:

int Classid:: f2(int х)

{әдіс денесі}

Класс анықтамасы берілген класс объектілерін құрмайды. Объектілер оларды анықтау жолымен құрады, мысалы:

Classid obj1, obj2, obj Array

Класс объектісінің өлшемі класстың статистикалық емес мүше берілгендерінің өлшемдер қосындысымен жадыда анықталады.

Бірнеше файлдардан тұратын бағдарламалық жобалармен жұмысжасағанда класс анықтамасы берілген класс объектілері қолданатын немесе оның әдістері анықталатын файлдарда болуға міндетті. Сондықтан класс анықтамасын арнайы түрде ол қажет болып табылатын файлдарда #include дерективасы көмегімен қосылатын тақырыптық файлға (хедер –файл) орналастырылады.Егер класс әдісінің анықтамасы анықталудан тыс орналасса,онда ол міндетті түрде өзі қолданылатын файлдарда анықталған болуы керек.Мұндай әдістің анықтамасы класс анықтамасымен бірге тақырыптық файлда болуы керек.

Белгілі бір класс обьектісінің ашық мүшелеріне қатынауға рұқсат алуды тура «.» және жанама « » таңдау операторлары көмегімен жүзеге асырылады.

С++ тілінде обьектілерді жою иницализациялау жұмыстарын орындайтын, обьектлердің жойылуы мен құрылуы кезінде автоматты түрде шақырылатын, кластың арнайы әдістері сәйкесінше конструкторлар мен деструкторлар деп аталады. Класта бірнеше конструкторларды құруға болады. Әрбір конструкторлардың өзінің басқалардан айырмашылығы бар параметрлері болады.Параметрлері жоқ конструктор үнсіздік конструкторы.Десруктор әрқашан жалғыз және параметрлері болмайды.

Тек ашық мүшелері бар және конструкторы жоқ класс обьектісі мәндер тізімі арқылы жай құрылымдық айнымалы сияқты инициализациялануы мүмкін.

Егер класс конструкторларының біреуі де ашық функция —

Класс мүшесі болып табылмаса,онда мұндай класстың мүшелері құрыла алмайды.Олар басқа кластар үшін базалық кластар болып табылады.

Класс обьектісін құрған кезде ол үшін сәйкес келетін конструктор автоматты түрде шақырылады.

Конструктор параметрі өз класы бола алмайды,бірақ көшіру конструкторы сияқты оған жасалған сілтеме болуы мүмкін.

Кластын компанент берілгеннің жалғыз данасы болуы үшін және кластың әрбір обьектісінің құрылуы кезінде басып шығарылмауы үшін ол класты статикалық сияқты анықтау керек,яғни Static атрибуты болуы керек.

Кластың статикалық компаненттік функциялары нақты обьект атауы жоқ кластың Static берілгендеріне қатынасуды қамтамасыз етеді.Кластың Static функциялары жай (статикалық емес) компаненттік барлық негізгі ерекшеліктерін сақтайды.

Класқа қатысты функция нақты обьекттің берілгендерін өңдеу үшін шақырған кезде бұл функцияға автоматты және айқын емес функция шақырылған обьект көрсеткіші беріледі.Бұл көрсеткіштің бекітілген this аты бар бағдарламалаушы үшін байқаусыз кластың әрбір функциясы келесі түрде анықталған:

Класс- аты *const this = өңделетін-обьекттің –адресі;

This көрсеткішін қолдану тиімділігі көрінетін жағдайлар:

-берілген класс компанентінің аты класс функциясының формальды параметрінің атымен сәйкес келгенде;

-класс функциясының денесінде айқын түрде бұл функция шақырылған обьект адресін көрсету қажет болғанда;

-функция параметрі ретінде кластың атын жазған кезінде обьекттің нақты атына жол берілмегенде (керек обьектіге мұндай функция сілтемесін немесе көрсеткішін берудің орнына).

Класс достары. Кластарға арналған стандартты операцияларды қайта жүктеу

Кейбір жағдайларда класс мүшесі болмауына қарамастан функция бұл кластың жабық мүшелеріне деген қатынау мүмкіншілігіне (доступ ) ие болған жөн.С++ тілі осы әрекетті орындауға мүмкіндік береді,егер функция класс досы немесе мүшесі болып табылатын класты friend қызметші сөзі көмегімен жарияласа.

Дос функциялары мен класстарды қолданудың бірқатар маңызды қызық ерекшкліктерін көрсететін мысалды қарастырайық:

# include <iostream.h.>

class Class1; //класты алдын ала жариялау

class Class2;

{public:void ff (Class 1 & ref);

};

class Class 1

{private: int x;

//дос функциялары мен кластарға арналған жол беру спецификаторы

//мәні жоқ

friend int main (void); // main – достық функциясы бола алады

friend void f ( Class 1 f ref);

friend class Class3; //Class3 барлық әдістері Class1 класына дос бола алады

friend void Class2: : ff (Class1 & ref);

}; // Class1 анақтамасының соңы class Class3//Class3-Class1 класына дос

{public: void func (Class1 & ref)

{ref.x=9;

return;

}

};

void Class2 : : ff (Class1 & ref)

{ref.x=11;

return;

}

//f-Class1 класына дос қарапайым сыртқы функция

void f (Class1 & ref)

{ref.x=7;

return;

}

int main (void)

{Class1 obj1;

obj1.x=5;

cout <<”obj.1x=”<<obj 1.x<<endl; //x=5

f (obj1);

cout<<”objl.x=”<<obj1.x<<endl; //x=7

Class3 obj3;

Obj3 func(obj1)

Cout <<”obj1.x=” << obj1.x<<end1; //x=9

Class2 obj2;

Obj2.ff(obj1);

Cout <<”obj1.x=” << obj1.x<<end1; //x=11

Return 0;

} // main соңы

Кластарға арналған операциялардың қайта жүктелуі

С++ тілінің көптеген @ операциялары қолданушы типтерінің объектілерімен жұмыс істеу үшін қайта жүктелуі мүмкін. Мұндай мүмкіндіктер объек кластар үшін де болады. @ операциясының қайта жүктелуі @ функция операциясы көмегімен жүзеге асырылады, оны класс мүшесі немесе достық функциясының айналдыруға (қажет емес) немесе жай функцияға айналдыруға болады.

Соңғы екі жағдайда функция – оператор ең болмаса бір сілтеме немесе көрсеткіш, класс типі бар аргументті қабылдау керек. Сыртқы функция операциясы үшін сәйкес класс мүшелерінің қатынауларын ескерген жөн.

Функция – оператор тауы operator қызметші сөзінен, және одан кейін орналасқан қайта анықталатын операция белгісінен тұрады.

Операцияларды қайта жүктеу типті беру,функцияны шақыру ережелері ISO/IES14882 халықаралық стандартында бетілген.

Көшіріп алу конструкторы. Беттік және тереңдетілген көшіріп алу

Класс құрамына арнаулы түр конструкторы – көшіріп алу конструкторы ене алады.Көшіріп алу конструкторы жалғыз параметрі ретінде осы класс обьектісіне сілтемені алады:

Classid:Classid (const Classid & obj)

{конструктор денесі}

Көшіріп алу конструкторы жаңа обьект класс типімен бар обьектіні көшіріп алу жолымен құрылған кезде шақырылады:

-сол типтің басқа бір обьектісімен оның инициализациясы және класс типі бар жаңа обьект анықтаған кезде;

-мән бойынша класс типі бар параметр-обьект класс әдісіне берілген кезде;

-return операторы арқылы класс типі бар обьект мәнін класс әдісінен қайтарылған кезде.

Егер бағдарламалаушы бірде бір көшіріп алу конструкторын құрмаса, онда компилятор автоматты түрде Үндемейтін көшіріп алу конструкторын құрады.Бұндай конструктор кластың мәліметтер өрістерінің элемент бойынша көшіріліуін орындайды.

Егер өрістердің ең болмаса біреуі динамикалық жадының белгілі бір облысына көрсеткіш болып табылмаса,онда үндемейтін конструкторды қолдану бағдарламаның дұрыс емес,яғни бұрыс жұмысына әкеледі.Бұндай жағдайда үндемейтін көшіріп алу конструкторының орнына өз көшіріп алу конструкторын жобалап алған жөн:

-беттік көшіруді орындайтын конструктор (көрсеткіштің обьектке көшірілуі орындалады,ал обьект көшірмесі динамикалық жадыда құрылады);

-тереңдетілген көшіріп алуы бар конструктор(динамикалық жадыда обьект көшірмесі құрылады).

Қорытындысында мынаны қайталайық,егер класта динамикалық жадымен жұмыс орындалмаса және конструктор қажет болмаса,онда үнсіздік бойынша көшіріп алу конструкторын қолдану көмегімен көшіріп алу конструкторын анықтау керек емес.Осындай кластарды қолданылатын бағдарламалар дұрыс жұмыс істейді.

Мүмкіндігінше мән бойынша,класс типі бар параметрді кластың әдісіне және класс типі бар обьекттің мәнін емес,сілтемесін оған класс әдісіне қайтарудан аулақ болған жөн.Бұл жағдайда көшіріп алу конструкторы қажет емес болады,бұл қосымшаның шапшаңдығының жоғарылауына әкеледі.

Көрсетілген мақсатқа жету үшін келесі ережелерді қолданған жеткілікті:

-мән юойынша класс типі бар параметрді,класс әдісіне берудің орнына бұл параметрді сілтемемн берген жөн,ал сәйкес аргументтің модификациясын тоқтату үшін функцмя параметрін const модификаторымен қамтамасыз ету керек;

-класс типі бар обьектлер үшін арифметикалық операцияларды қайта жүктегенде қайта жүктеу әдісін обьектке қайтаратындай етіп жобалау керек.

Қорытынды

Қорытындылап айтқанда С++ тіліндегі класстар көптеген операцияларды қолданушы типтердің обьектілерімен жұмыс істейді және қайта жүктеу мүмкіншілігіне ие. Мұндай мүмкіндіктер обьект-кластар үшін болады. Операцияның қайта жүктелуі, кластың функция-операциясы көмегімен жүзеге асырылады, оны класс мүшесі немесе достық функциясына айналдырүға немесе жай функцияға айналдыруға болады. Операцияларды қайта жүктеу типті беру, функцияларды шақыру ережелері халықаралық стандартында берілген. Класста бірнеше конструкторларды құруға болады.

Класс обьектісін құрған кезде ол үшін сәйкес келетін конструктор автоматты түрде шақырылады. Обьекттің мүше берілгендердің (обьект айнымалыларының) инициализациясы конструктордың орындалуы сияқты инициализациясы кезінде де орындала алады. Қорытындылап айтқанда, егер жадыда динамикалық жадымен жұмыс орындалмаса және конструктор қажет болмаса, онда үнсіздік бойынша көшіріп алу конструкторын қолдану көмегімен көшіріп алу конструкторын анықтау керек емес. Осындай кластарда қолданылатын бағдарламалар дұрыс жұмыс істейді.

Пайданылған әдебиеттер

1. С/С++ программирование на языке высокого уровня\ Т.А

2. Бруно Бабэ. Просто и ясно о Borland С++: пер.с англ. — Бинам, 1994.

3. Тихомиров Ю. Visual С++6.Спб.:БХВ – Петербург, 1999.

4. Шиманович Е.Л. С/ ++В примерах и задачах –МН.: Ковое знание 2004.

Басқа да материалдар Мұғалімдерге Ашық сабақтар Сабақ Жоспарлары Оқушыларға Рефераттар ҰБТ Шығармалар СӨЖ

ПІКІР ҚАЛДЫРУ