Листинг 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"
30
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=" <
}
Объектіге, сол үшін шақырған функция-мүше, нұсқауышы функцияның жасырын параметрі болып табылады. Бұл анық емес параметрге this сияқты анық сілтеу болады. Класс х әр функциясына нұсқауьші this айқын емес сипатталған:
31
х* 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; } };
Достарыңызбен бөлісу: |