If(рнек-шартты) оператор if(рнек-шартты) оператор-1 elseоператор-2

 

Шартты-операторды ысартылан трінде рнек-шартты есептелінеді де, егер оны шамасы нольден баса болса, онда шарттан кейінгі оператор орындалады, кері жадайда ешандай іс орындалмайды.

 

Шартты операторды толы трінде рнек шартты ноль емес шамасында программаны кейінгі операторына рі-арай туімен оператор-1 орындалады, ал рнек-шартты нольдік шамасында оператор-2 орындалады да, программаны келесі операторына теді.

 

Параметрлі цикл келесі схема бойынша рылады:

 


For ( El; Е2; ЕЗ ) оператор

бнда El; Е2; ЕЗ - скалярлы типті рнектері. Параметрлі цикл келесі алгоритммен шыарылады:

 

1. рнек Е1 есептелінеді. детте, бл рнек циклді басына дайынды жасайды.

 

2. рнек Е2 есептелінеді жне егер ол нольге те болса, программаны келесі ту (циклден шыу) орындалады. Егер Е2 нольгете болмаса, пункт 3 орындалады.

 

3. Оператор(циклді денесі) орындалады.

4. рнек ЕЗ есептелінеді - циклді айталануа дайындаы орындалады. осыдан кейін айтадан пункт 2 орындалады.

 

Циклді денесінде кез келген типті цикл операторыны айталауын тотату шін break операторын олданады. Циклді денесінде кез келген жерінен циклді келесі айталауына ту шін continue операторы колданады. Бл операторлар зіні ызметі бойынша Паскаль тіліні сйкес операторларымен сас.

C++ рылымды программалау шін операторларды толы жиынтыын

стананмен, оны ішіне брі бір ту операторы кіргізілген. goto таба;

 

Таба ту адресін береді жне бір операторды белгілейді. Сол оператор goto операторы жататын рамды операторды ішінде болу керек. Деректер жарияласуынан тратын рамдас оператора кіру оны басында болмаса рсат етілмейді.

 

№5 лекция. Си/Си++ препроцессорлы ралдар: Препроцессорлы ндеуді негізгі тсініктері. Препроцессорлы айнымалылар. Макро-анытаулар (макростар).

 

Инкапсуляция

Программалауда негізі деректерді абстрактылы типтерінде апарат саналы трде программаны кішігірім блігінде жасырынып ойылады. р объект екі трде болады. Сырты кзараспен араанда абстрактылы деректер типі (АДТ) абстракцияларды сипатын анытайтын операцияларды жиынтыы болып табылады. Бл АДТ анытайтын программист объектіні ішкі кйін стау шін олданылатын айнымалыларыны шамаларын креді.

Мысалы, stack деректеріні абстрактылы типі шін олданушылар жіберілген операциялар - pop, push, top- тек сниаттамасын креді. Баса жаынан, stack-ті іске асыратын программистке деректерді наты рылымдарымен манипуляция жасау керек. Наты белшектер тым абстрактылы обьектте инкапсуляцияланан.

 

р дара айнымалыны зіні жеке жиынтыы болады. Бл шамалар клиенттермен тікелей байланыста болмай тек ана класпен ассосацияланан дістерімен згеру болады.

 

Объект кй мен сипатты комбинациясы болып табылады. Кй дараны айнымалысымен тсіндіріледі, сипат діспен сипатталынады. Сыртынан клиенттер объектіні тек сипатын анабіледі. Ішінен дістерді ажетті сипатын амтамасыз етуі, кйді згертуі жне баса объектілермен зара рекеттесу туралы толы апарат алуа болады.

Кластарды р трлілігі ОБП ішінде кластар бірнеше р трлі трледе болады жне р трлі масаттар шін

олданылады. Кластарды лкен блігін кслесі категориялар амтиды:

 

• деректерді басару

 

• деректер кзі жне деректерді беруде келістірушелер

 

• деректерді круге арналган кластар

 

• осымша немесе жобалауы жеілдетілген кластар

 

Бл бітпейтін тізім. Егер класс екі категорияны арасында ажыратылса, онда оны екі класа блуге болады. Деректерді администраторлары Data Manager (Data немесе State деп аталатын) кластары - бл негізгі міндеті деректерді олдау немесе бір нрсені кйі туралы апаратты олдау болып табылатын кластар. Мысалы, картамен ойнау шін Card

 


классы негізгі міндеті картаны тсін жне рангісін сатаудан трады. Кластар-администраторлар - бл жобаны іргелі блоктары, маыздылытары.

Деректеріні кзі Data Source - бл деректерді генерациялайтын кластар. Деректерді беру кезіндегі келістірушілер (Data Sinks) деректерді абылдап жне рі арай беру шін (мысалы файла жазу) ызмет атарады. Кздер жне келістірушілер, кластар-администраторлар айырмашылыы з ішіне деректерді сатамайды, оларды срау бойынша генерация жасайды (бл деректер кздері) немесе шаыран кезде дейді (бл деректер келістірушілер).

 

арау кластар да кезкелген тіркемеде керек болады. Барлыпрограммалар акпаратты шыумен (детте экрана) іске асырылады, сондытан ішкі деректердіжне оларды шыуын іске асыратын дістерді блектеу болады. Объект зі жне онывизуализациясы бліп алу пайдалы. Осы принципінебайланысты графикалы апаратты шыаруды амтамасыз ететін жйелер біраз жеілденеді. Идеалды жадайда модель оны визуалды крсетуі туралы апараттарды ажет етпейдіжне стамайды. Бл сол бір модельді р трлі тіркемелерде олдануа ммкіндік жасайды.

 

осалы кластара рамында пайдалы апарат болмаса дакрделі тапсымаларды орындауды жеілдететін кластар жатады.Мысалы, карталарды байланысты тізімі - колода.

 

Мысалы: Картамен ойнау.

Card классы зіні болаша олдануын аз біледі, сондытан кез келген типтегі карталы ойында олдану ммкіндік береді.

Card классы

Картаны тсін жне рангысын сатау Каратаны тсін айтару

Картаны "бет суретін жоары немесе тмен" кйін сатау Экранда картаны суретін салу Экраннан картаны алып тастау

Card классы деректерді администраторы болып табылады, ол тсті жне рангыны шамаларын сатайды жне айтарады жне картаны суретін салады. Card класыны анытауды арайы:

 

Класс Card

Suit - картаны тсін жне рангысын айтарады color - картаньщ тсін айтарады

laceUp - бет суретті жоары немесе тмен жатан кйінтексереді draw - экранда картаны суретін салады

erase - экраннан картаны алып тастайды

 

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

C++ кластары алдын-ала аныталан жйелік типтерді кеітуді сынады. Класс - бл пайдаланушымен аныталатын деректерді объектілі типі , бл программистпен толы аныталатын агрегатты тип, оны жазуы осы типті айнымалыларыныммкіндік шамаларыны облысын анытайтын компонент-деректерден жне осы типті айнымалыларымен жне айнымалыны райтын компонент-деректермен жргізілетін операцияларды жазуынан трады, р класс объектілерді бірыай жиынын жне олармен жргізілетін операцияларды крсетеді. Класс осындай объектілерді жасау, манипуляциялау жне жою шін арналан ралдарды береді.

 

С-дегі программаларды бірлестігін сатау шін С++-те объектілі типті (класты) жазу синтаксисы рылымды типті немесе С-дегі біріккен типті жазуына сас тандалынады. Шын мнінде С++-тегі рылымдар мен біріктірулер объектілі типтерді варианттары сияты аралады. Объектілі типтерді ш варианты бар: рылым (struct), біріктіру (union) жне класс (class), олар тип компоненттеріне жіберу ммкіндіктерімен

 


ажырытылады. рі арай ысартып объектілі типтерді барлы варианттарын класс деп атаймыз. Класты жазу class кілтті сзден басталады. Класты мушелеріні тізімін меншікті элементтері анытайды. Класты р компоненті шін жіберу дегейі не айын: public, protectedнемесе privateкілтті сздерді біреуімен жіберу дегейін крсетіп, не айын емес - ндемеу бойынша орнатылады. Жіберу дегейін крсету, жіберуді баса дегейін крсетуін кездескенше, барлы келесі класты компоненттері жатады.

 

• publicкласты айнымалысы белгілі программаны.кез-келген жерінен осы класты компоненттеріне жіберуіне рсат береді.

• privateтек ана класты функция-дістерінен осы класты компоненттеріне жіберуіне рсат береді.

• protectedкластарды тек иерархиялы жйесінде маынасы бар жне класты туынды дісінен осы дегейді компоненттеріне жіберуіне рсат береді.

Structтипіні класыны барлы компоненті шін ндемеубойынша жіберу дегейі publicабылданады, біра та жіберудібаса дегейлерін айын беруге болады, classтипіні класыны компоненттеріне жіберу дегейі ндемеу бойынша privateболады, баса да дегейлерді айын анытауа болады, unionтипіні класы шін жіберу дегейі publicболады жне ол згермейді.

Пайдаланушыа класты ашы блігі жиі ажет боландытан, жазу кезінде ол бірінші жру керек. Мысалы, бір программист TPoint (нкте) класында нктелерді координаталарына сырты жіберуді тиым салды да, жазытытаы нктелерді орын ауыстыру дістеріне сырты жіберуді рсат беруді шешті. TPoint класыны жазуын былай руа болады:

 

Листинг 4.1class TPoint { private:

int x, y; public:

 

void movePoint ( int newx, int newy);//жаанктегежылжыту void relmove ( int dx, int dy );// dx,dyжылжуы

 

int getx ( void ) ( return x; } ; int gety ( void ) { return у; };

 

};

 

Компонент-функцияларды денесін жазу класты жазуыны ішіне кіреді, бл getx жне gety функциялар шін мысалдаы сияты жасалынады, немесе класс жазуынан тыс орналасады. Компонент-функциялар оларды шаыранда осымша аргументті объектілі типті айнымалысына функция шаырыш нсауышты айын емес трде алады жне функция денесінде класты барлы компоненттеріне арауа болады. Осыан байланысты класты жазуынан тыс компонент-функцияларды денесін жазуда, класты функцияа жататыны туралы компилятора апарат жасау шін, контексті шешу операциясын пайдалану керек. TPoint класыны дістерін былай жазуа болады:

 

void TPoint : : movePoint (int newx, int newy )

{ x = newx; у = newy ; }

void TPoint : : relmove ( int dx, int dy )

{ x += dx; у += dy ; }

 

Типті жазуында объектілі типті айнымалыларын ру кезінде компонент-деректерді бастапы инициализация жасау шін арнайы діс-конструкторлар кіргізіледі. Конструкторды аты типті атымен бірдей болады, конструктор ешандай шаманы айтармайды жне ол шін кайтарылан шаманы типтері крсетілмейді. Жоарыдаы

 


аралан TPoint класы шін конструкторсыз келістіруге болады жне инициализация жасау шін movePoint дісін олданады. Мысал ретінде координаталар осьтеріне параллель тік брышты абыраларын сипаттайтын TRect класын арайы.

 

Объектілі типті конструкторлары толытыран апарат келесі тарауда арастырылады.

Объектілі типті айнымалысын жариялау жалпы ережелер бойынша ралады, біра айнымалыны идентификатордан кейін класты белгілі конструкторды аргументтерді жашалармен крсетіледі, мысалы:

 

TRectrl(2, 4, 20,50);/*бір конструкторды олдануды инициализация жасау* /

TRect *pr = &rl; // Trect-ке нсауыш

TRectr2, *ptr; /* r2шін параметрсіз конструкторколданылады*/

 

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

 

ptr = new TRect( 7 , 3 , 1 8 , 4 0 ) ;

 

Обьектілі типті компоненттеріне арау шін компоненттерді аты обьектілі айнымалыны атымен немесе соан баытталан нсауышпен аныталады.

 

rl.grow( 2, -3); pr->move( 1, 1);

 

Boolean bb= rl.isEmpty( );

 

Card класын ру мысалына арап, функция card(suit,int) осы класты жазуда конструктор болып табылады. draw жне halfdraw дістері функцияны прототипіндегі жолмен жазылады.

 

Листинг 4.3 Cardкласыны С++-те жазуыenum suits {diamond, club, heart, spade}; enum colors {red, black};

class card { public:

 

card (suits, int) ;//атрибуттаражіберу colors color ();

 

bool faseUp(); in trunk ();

 

suits suit (); //орындалатын істер void draw (window&, int x, int y); void flip ();

 

private: bool faseup; int r; //ранг

 

suits s; //масть

 

suit дісі масты шамасын, ал rank рангыны шамасын айтарылады.

Осы класты жузеге асыру шін файл интерфейсте файлда сипатталан дістерді жмысын амтамасыз етеді.

 

#include "card.h"

 


card::card(suits sv, int rv)

{

s=sv;//масть инициаланады r=rv;//ранг инициаланады faseup=true; //

 

}

int card ::rank() {return r;}

 

Класс атыны жне діс атыны комбинациясы толы атты райды.

Кластарды олданумен программалау кезінде кп кішкентай функциялар жиі олданылады. Бл тиімділікті атты тмендетеді, йткені функцияны шаыру ны (баса тілдермен салыстырып араанда жоары болмаса да) функцияны денесіне ажетті жадысы бойынша ос сілтемеге араанда, брі бір кп жоары болады. Бл проблеманы жеу шін inline-функцияларды (рылан функцияларды) аппараты дайындалады. Компилятор кодына шаыру функциясы айта райды. Класс жазуында аныталан (жй сипатталан емес) функция inlineдеп есептелінеді.Бдан баса,функцияны класс протоколынан тыс кілтті сзбен анытауаболады.

 

inline int card::rank() { return r; }

 

№6 лекция.C++ объектіге баытталан ралдары: Кластар жне дістер; C++ тіліндегі кластар мен дістер; Кілтті сз this; Функция-мшелер. Дерек-мшелер. Кластарды элементтеріне жіберуді басару.

 

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

 

Кілтті сз this static спецификациясыз жазылан класты кез-келген функция-мшесіні денесіне жіберілетін арнайы локалды айнымалыны крсетеді. Айнымалы this жазуды талап етпейді жне рашан сйкес объектіні нсауышын стайды.

 

• this ->мшені аты мшесі болып табылатын объектіні крсетеді

 

• *this зі объекті болып табылады да, контекстке байланысты сол немесе о жаты шама бола алады.

• this объектіні адресі болып табылады

 

Мысал.        
class С {        
int cl,c2;        
public:        
void init(int b) { c2=b; cl=b+l; }
С&inc() { cl++; c2++; return *this; .}
void *adress() { return this; }  
void print() { cout << cl << c2; }
};          

void main(void) {

Са;

a.init(lO); a.print(); cout « " adress=" <<a.adress<< " inc " << a.inc().print() << endl;

}

 

Объектіге, сол шін шаыран функция-мше, нсауышы функцияны жасырын параметрі болып табылады. Бл аны емес параметрге this сияты аны сілтеу болады. Класс х р функциясына нсауьші this айын емес сипатталан:

 


х* this;

 

жне ол функция-мшені шаырылан объектіні крсету арылы инициализацияланан. This айын сипатталмайды, себебі ол кілтті сз. Класс х эквивалента трде былай сипатталынады:

 

class х { int m;

 

public:int readm(){ r e t u r n this->m;

}};

 

class x { int m; public:

 

int readm(){return m; } };