Объектілер және кластар Айнымалы өз типіне қандай қатынаста болса, объект те өз класына сондай қатынаста. Класс анықтамасы class қызметші сөзінен басталып, класс есімі жазылады. Құрылым сияқты, класс денесі фигуралық жақшаға алынып, «нүктелі үтір» белгісімен аяқталады.
ОБП –дың негізгі ерекшелігі берілгендерді жасыра алуы.
Бұл терминнің мағынасы мынада: берілгендер класс ішінде орналасқан және кластан тыс орналасқан функциялардың санкциясыз қолданылуынан қорғалған. Егер кейбір берілгендерді қорғау керек болса, онда оларды private қызметші сөзі бар класс бөлігінде орналастыру керек. Мұндай берілгендер тек класс ішінде ғана қолданылады. Public қызметші сөзімен сипатталушы берілгендер кластан тыс та қолданылады.
Кластың ішінде қолданылады (жабық)
Кластан тыс (ашық) қолданылады
Класс құрамына кіретін функциялар класс әдістері болып табылады. Класс ішіндегі берілгендер мүшелер немесе класс өрістері деп аталады. Келесі мысалды қарастырайық:
// smallobj. сpp
# include
class smallobj
{private:
int somedata;
public:
void setdata (int d)
{somedata = d;}
void showdata ( )
{ cout << “ өрістің мәні = “ << somedata << endl;}
};
int main ( )
{ smallobj s1,s2;
s1. setdata (1066);
s2. setdata (1776);
s1. showdata ( );
s2. showdata ( );
return 0;
}
setdata( ) и showdata( ) функциялары класс ішінде анықталған, яғни функция коды класс анықтамасында орналасқан. Осындай түрде анықталған класс әдісі кірістірілген анықтама болып табылады.
main ( ) фуекциясында s1, s2 екі объектісі анықталған. Объектіні анықтау объектіні сақтауға қажетті жады бөлу болып табылады.
Объект есімін класс әдісімен байланыстыру үшін нүкте (.) операциясын қолданады. Нүкте операциясы класс мүшесін алу операциясы деп аталады. Кейбір объектілі бағытталған бағдарламалау тілдерінде объект әдісін шақыруды хабарламалар деп атайды.
Мысалы:
// englobj.cpp
# include
class Distance
{ private:
int feet
sloat inches;
public:
void setdist (int ft, sloat in )
{feet = ft; inches =in;}
void getdist ( )
{cout << ”feet =”; cin>> feet;
cout << “inches =”; cin >> inches;
}
void showdist ( )
{cout << feet << “’ “ << inches < };
int main ( )
{Distanse dist1, dist2;
dist1. setdist (11,6.25);
dist2. getdist ( );
cout << ”n dist1 = “; dist1. showdist ( );
cout << ”n dist2 = “; dist2. showdist ( );
cout < return 0;
}
11 және 6,25 аргументтерімен шақырылған dist1 объектісінің өрістерінің мәні setdist() функциясының көмегімен беріледі, ал dist2 объектісінің өрістерінің мәнін getdist() функциясының көмегімен қолданушы енгізеді.
Englobj мысалы класс объектісінің өрістерін инициализацияау үшін класс әдісін қолданудың екі тәсілін көрсетеді. Объект өрістерін құру кезінде бағдарлама сәйкес тәсілді шақырудан гөрі, автоматты инициализациялау ыңғайлы.
Инициализациялаудың мұндай түрі – конструктор деп аталатын ерекше класс әдісінің көмегімен іске асырылады. Конструкторларда бірнеше ерекшеліктер бар. Біріншіден, конструктор аты класс атымен дәл сәйкес келеді. Екіншіден, конструкторда қайтарылушы мәні болмайды. Бұл конструктордың жүйе арқылы шақырылатындығымен түсіндіріледі. Яғни конструктордың мәнді қайтаратын бағдарлама немесе функцияның болмайтындығын көреміз. Конструктордың қызметі – класс объектісінің өрістерін инициализациялау.
Мысал 3:
// counter. cpp
# include < iostream. h>
class Counter
{ private:
unsigned int count;
public:
Counter ( ) : count (0)
{/*пустое тело*/}
void inc_count ( )
{ count++;}
int get_count ( )
{ return count; }
};
int main( )
{ Counter c1, c2;
cout << ”n c1 = “ < cout << ”n c2 = “ < c1. inc_count ( );
c2. inc_count ( );
cout << ”n c1 = “ < cout << ”n c2 = “ < count << endl;
return 0; }
Конструкторда инициализация әдіс прототипі мен функция денесінің арасында орналасқан және қос нүктемен ажыратылады. Инициализацияланатын мән өріс есімімен кейінгі жақшада орналасқан.
Counter ( ) : count (0)
{ }
Егер класс өрістерінің бірнешеуін инициализациялау керек болса, онда мәндер үтірмен бөлініп, инициализация тізімі құрылады.
Программа жұмысының қорытындысы:
с1=0
с2=0
с1=1
с2=2
Конструктордың дұрыс жұмыс істеп тұрғанына көз жеткізу үшін, хабарлама басуын талап етеміз:
Counter ( ) : count (0)
{cout << ” n Конструктор “ ;}
Программа жұмысының нәтижесі:
Конструктор
Конструктор
с1=0
с2=0
с1=1
с2=2
Объект құрыларда ерекше класс әдісі – конструктор шақырылады. Объектіні жоюда автоматты түрде шақырылатын әдіс деструктор деп аталады. Деструктор есімі конструктор есімімен сәйкес келеді және есім алдында ~ тильда белгісі қойылады.
Объектілерді бірнеше тәсілмен жоя алмайтындықтан деструкторлар мәндерді қайтармайды және аргументтері болмайды.
Деструктордың негізгі жұмысы – объект құруда конструктормен бөлінген жадыны босату.
Class Foo
{ private:
int data;
public:
Foo ( ): data (0)
{ }
~ Foo ( )
{ }
};
Келесі мысалда асыра жүктелген конструктор, әдістердің кластың сыртында анықталуы, объектілерді функцияның аргументі ретінде қабылдауы көрсетілген.
// englcon. 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 < void add_dist ( Distanse, Distanse ); // прототип
};
void Distanse: : add_dist ( Distanse d2, Distanse d3);
{ inches = d2. inches + d3. inches;
feet = 0;
if ( inches > = 12.0)
{ inches — = 12.0
feet ++;
}
feet + = d2. feet + d3. feet;
}
int main ( )
{ Distance dist1, dist3;
Distance dist2 (11, 6.25);
dist1. getdist ( );
dist3. add_dist ( dist1, dist2 );
cout << ”n dist1 = “; dist1. showdist ( );
cout << ”n dist2 = “ ; dist2. showdist ( );
cout << ”n dist3 = “ ; dist3. showdist ( );
cout < return 0;
}
Мысалда бір Distance() есімімен берілген екі конструктор бар, сондықтан конструктор асыра жүктелген болып табылады.
Жаңа объект құрылыу кезінде қанша аргумент қолдануына байланысты қай конструктор орындалатындығы анықталады.
Класс ішінде класс әдісінің анықталуы міндетті емес.
Класс анықтамасының ішінде тек 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