Функцияның объектілерді қайтаруы
Жоспар:
1 Конструктор туралы түсінік
1.1 Конструктор әдістері
1.2 Келісім бойынша көшірме конструкторы
1.3 Функцияның объектілерді қайтаруы
2 Деструктор туралы түсінік
2.1 Деструктордың негізгі жұмысы
2.2 Кластар, объектілер және жады
2.3 Кластың статикалық берілгендері
2.4 Класс өрістерінің жеке-жеке жариялануы және анықталынуы
3 Операцияларды асыра жүктеу
3.1 Унарлы операцияларды асыра жүктеу
3.2 Постфиксті операция
3.3 Арифметикалық операциялар
Қорытынды
ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР
Кіріспе
Айнымалы өз типіне қандай қатынаста болса, объект те өз класына сондай қатынаста.
Класс анықтамасы class қызметші сөзінен басталып, класс есімі жазылады.
Құрылым сияқты, класс денесі фигуралық жақшаға алынып, нүктелі үтір белгісімен аяқталады.
ОБП - дың негізгі ерекшелігі берілгендерді жасыра алуы.
Бұл терминнің мағынасы мынада: берілгендер класс ішінде орналасқан және кластан тыс орналасқан функциялардың санкциясыз қолданылуынан қорғалған. Егер кейбір берілгендерді қорғау керек болса, онда оларды private қызметші сөзі бар класс бөлігінде орналастыру керек. Мұндай берілгендер тек класс ішінде ғана қолданылады. Public қызметші сөзімен сипатталушы берілгендер кластан тыс та қолданылады.
Private:
Public:
Берілгендер
немесе
функциялар
Берілгендер
немесе
функциялар
Кластың ішінде
қолданылады (жабық)
Кластан тыс (ашық)
қолданылады
Класс құрамына кіретін функциялар класс әдістері болып табылады.
Класс ішіндегі берілгендер мүшелер немесе класс өрістері деп аталады.
Келесі мысалды қарастырайық:
smallobj. сpp
# include iostream. h
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 екі объектісі анықталған. Объектіні анықтау объектіні сақтауға қажетті жады бөлу болып табылады.
Объект есімін класс әдісімен байланыстыру үшін нүкте (.) операциясын қолданады.
Нүкте операциясы класс мүшесін алу операциясы деп аталады.
1 Конструктор туралы түсінік
1.1 Конструктор әдістері
Конструкторда инициализация әдіс прототипі мен функция денесінің арасында орналасқан және қос нүктемен ажыратылады. Инициализацияланатын мән өріс есімімен кейінгі жақшада орналасқан.
Counter ( ) : count (0)
{ }
Егер класс өрістерінің бірнешеуін инициализациялау керек болса, онда мәндер үтірмен бөлініп, инициализация тізімі құрылады.
Программа жұмысының қорытындысы:
с1=0
с2=0
с1=1
с2=2
Конструктордың дұрыс жұмыс істеп тұрғанына көз жеткізу үшін, хабарлама басуын талап етеміз:
Counter ( ) : count (0)
{cout " \n Конструктор \" ;}
Программа жұмысының нәтижесі:
Конструктор
Конструктор
с1=0
с2=0
с1=1
с2=2
Объект құрыларда ерекше класс әдісі - конструктор шақырылады.
1.2 Келісім бойынша көшірме конструкторы
Бұған дейін объектіні инициализациялаудың екі тәсілін қарастырдық. Аргументсіз конструктор объект өрістерін тұрақты мәндермен инициализациялай алады, ал ең болмағанда конструктордың бір аргументі болса өрістерді мәндермен инициализациялай алады.
Өрістерінің мәні анықталған объектіні қолданып объектіні инициализациялаудың үшінші түрі бар. Әрбір класты құратын компилятор үшін келісім бойынша көшірме конструкторы беріледі. Көшірме конструктордың бір ғана аргументі болады және конструктор сияқты сол кластың объектісі болып табылады.
ecopycon. cpp
# include iostream. h
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 " \ ` - " inches ` \ " `;}
};
int main ( )
{ Distance dist1 (11, 6.25);
Distance dist2 (dist1);
Distance dist3 = dist1;
cout "\n dist1 = " dist1. showdist ( );
cout "\n dist2 = " dist2. showdist ( );
cout "\n dist3 = " dist3. showdist ( );
cout endl;
return 0;
}
dist2, dist3 объектілері келісім бойынша көшірме конструкторының көмегімен екі тәсілмен алынған.
1.3 Функцияның объектілерді қайтаруы
Келесі мысалды қарастырйық:
englret. cpp
# include iostream. h
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 " \ ` - " inches ` \ " `;}
Distanse add_dist ( Distanse );
};
Distanse Distanse: : add_dist ( Distanse d2);
{ Distanse temp;
temp. inches = inches + d2. inches;
if ( temp. inches = 12.0)
{ temp. inches - = 12.0;
temp. feet = 1;
}
temp. feet + = feet + d2. feet;
return temp;
}
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 endl;
return 0;
}
temp
feet
inches
feet
inches
feet
inches
temp берілгендері
return add_dist;
операторының
көмегімен
dist3-ке меншіктеледі
dist3 = dist1. aad_dist (dist2)
dist1 dist2
feet d2.feet
inches d2.inches
Құрылымдарды класс ретінде де қолдануға болады. Құрылым мен кластың формальды айырмашылығы мынада: келісім бойынша кластың барлық мүшелері жасырын болады, ал құрылымның барлық мүшелері ашық болады.
рrivate қызметші сөзін класс мүшелері үшін көрсету міндетті емес:
class foo class foo
{ private: { int data1;
int data1; public:
public: void func ( );
void func ( ); };
};
Құрылым үшін public қызметші сөзі келісім бойынша беріледі.
struct foo
{ void func ( );
private:
int data1;
};
Программистер құрылымды берілгендерді біріктіру үшін, ал кластарды берілгендер мен функцияларды біріктіру үшін қолданады.
2 Деструктор туралы түсінік
2.1 Деструктордың негізгі жұмысы
Объектіні жоюда автоматты түрде шақырылатын әдіс деструктор деп аталады. Деструктор есімі конструктор есімімен сәйкес келеді және есім алдында ~ тильда белгісі қойылады.
Объектілерді бірнеше тәсілмен жоя алмайтындықтан деструкторлар мәндерді қайтармайды және аргументтері болмайды.
Деструктордың негізгі жұмысы - объект құруда конструктормен бөлінген жадыны босату.
Class Foo
{ private:
int data;
public:
Foo ( ): data (0)
{ }
~ Foo ( )
{ }
};
Келесі мысалда асыра жүктелген конструктор, әдістердің кластың сыртында анықталуы, объектілерді функцияның аргументі ретінде қабылдауы көрсетілген.
englcon. cpp
# include iostream. h
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 " \ ` - " inches ` \ " `;}
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 endl;
return 0;
}
Мысалда бір Distance() есімімен берілген екі конструктор бар, сондықтан конструктор асыра жүктелген болып табылады.
Жаңа объект құрылыу кезінде қанша аргумент қолдануына байланысты қай конструктор орындалатындығы анықталады.
Класс ішінде класс әдісінің анықталуы міндетті емес.
Класс анықтамасының ішінде тек add_dist ( ) функциясының прототипі бар.
Функияның анықтамасы листингтің басқа жерінде болса да, ол класс әдісі болып табылады. add_dist ( ) функциясы Distance класынан кейін анықталады. add_dist ( ) функциясының есімі анықталарда Distance класының есімі және : : символы тұрады. Бұл белгі кең ауқымды келісім операциясының белгісі болып табылады.
Әдістің кластың сыртында анықталу форматы:
Қайтарылатын_мәннің_типі класс_есімі : : функция_есімі
{ }
: :-келісім операциясы.
Объектілерді функцияға берілу синтаксисі жай айнымалыларды беру синтаксисімен бірдей. Бірақ мынадай маңызды бөліктері бар:
# Класс әдісіне әруақытта класс өрістерін қолдануға мүмкіндік бар (объект (.) операциясы арқылы әдіспен байланысады).
# Класс әдісін басқа да объектілер қолдана алады. Олар оның аргументі түрінде қарастырылады.
Класс әдісінің әрбір шақырылуы осы кластың белгілі бір объектісімен байланысты (статикалық функцияны шақырудан басқа). Әдіс объектінің кез келген, ашық және жабық мүшелерін есімі арқылы тікелей ала алады. Сонымен қатар әдіс нүкте операциясы арқылы өз класының басқа объектілерінің мүшелерін де ала алады, олар әдіс аргументі ретінде қаралады.
add_dist ( ) функциясы мәндерді қайтармайды. Қайтарылатын мәннің типі
void болып табылады. Нәтиже автоматты түрде dist3 объектісіне меншіктеледі.
dist3
feet
inches
feet
inches
feet
inches
dist3 әдісі оның
берілгендерін
тікелей ала алады
dist3. aad_dist (dist1, dist2)
dist1 dist2
dist1. feet dist2. feet
dist1. inches dist2. inches
2.2 Кластар, объектілер және жады
Әрбір объектінің өзінің тәуелсіз берілгендер өрісі болады. Бір кластың барлық объектілері бір әдісті қолданады.
Класты құру кезінде класс әдісі құрылады және бір-ақ рет компьютер жадысына орналастырылады. Әрбір объектінің өз мәндер жинағы бодады, объектілер өрістері жалпы боламуы керек. Объектілерді құруда әрбір берілгендер жинағы жадыдан белгілі бір бос орын алады.
Объект 1 Объект 2 Объект3
data1 data1 data1
data2 data2 data2
function1
function 2
2.3 Кластың статикалық берілгендері
Егер кластың берілгендер өрісі static қызметші сөзімен сипатталса, онда бұл өрістің мәні сол кластың барлық объектілері үшін бірдей болады. Кластың статикалық берілгендері барлық объектілер қандай да бірдей мәндерді бірлесе қолданғанда пайдалы.
Статикалық өріс өз мінездемесі бойынша статикалық айнымалыға ұқсас: ол класс ішіде ғана көрінеді, ал оның өмірінің уақыты программаның өмір сүру уақытымен сәйкес келеді. Бірде бір класс объектісі болмаса да, статикалық айнымалысынан өзгешелігі - кластың статикалық өріс бар болады.
Кластың статикалық айнымалысын қолдану мысалын қарастырайық.
Берілген мезетте әр объекті өзі сияқты жадыда қанша объект бар екендігін білу қажет болсын. Бұл жағдайда класқа count есімді статикалық айнымалыны енгізіеміз. count айнымалысын барлық объектілір көре алады және олардың бәрі бірдей мәнді көреді.
statdata. cpp
# include iostream. h
class foo
{ private:
static int count;
public:
foo ( )
{ count ++;}
int getcount ( )
{ return count; }
};
int foo : : count = 0; count анықтамасы
int main( )
{ foo f1, f2, f3;
cout "Объект саны = " f1. getcount ( ) endl;
cout "Объект саны = " f2. getcount ( ) endl;
cout "Объект саны =" f3. get_count ( ) endl;
return 0; }
f1, f2, f3 объектілері үшін main( ) функциясында конструктор үш рет шақырылады, count өрістерін инкременттеу де үш рет болады.
getcount ( ) әдісі count - ты қайтарады. Барлық жағдайда да бұл әдіс бір мәнді қайтарады.
Объект саны =3
Объект саны =3
Объект саны =3
Егер статикалық емес, автоматты count өрісін қолдансақ, онда конструктор әр объекті үшін бұл өрістің мәнін бірге арттырар еді.
Объект саны =1
Объект саны =1
Объект саны =1
2.4 Класс өрістерінің жеке-жеке жариялануы және анықталынуы
Статикалық өрістерді анықтау жай өрістерді анықтау тәрізді жүргізілмейді. Жай өрістертер жарияланады, яғни компиляторға оның есімі және типі хабарланады, содан соң анықталады, яғни компилятор айнымалыға типіне сәйкес жадыдан орын бөледі. Осының бәрі жалғыз ғана сипаттаудың көмегімен жүргізіледі. Ал статикалық өрістер үшін көрсетілген әрекеттер екі оператордың көмегімен жүргізіледі. Өрісті жариялау кластың ішінде жүргізіледі, ал оны анықтау кластың сыртында орындалады.
Егер статикалық өрістің анықталуы кластың ішінде орналасса, онда класты анықтау оған жадыдан орын бөлуді көрсетпейді деген қағиданы бұзған боламыз. Сондықтан статикалық өрістің анықталуын кластың сыртында орналастыру арқылы программа орындалуын бастағанға дейін оған жадыдан бір рет қана орын бөлінеді.
Объект 2
Объект 1 Объект 3
Автоматты Автоматты Автоматты
өрістер өрістер өрістер
data1 data1 data1
data2 data2 data2
Статикалық өрістер
data3
data4
Статикалық өрістермен кең ауқымды айнымалырадың арасында ұқсастық бар. Статикалық өрістермен жұмыс істеу барысында компилятор тани алмайтын оңай қателіктер ... жалғасы
1 Конструктор туралы түсінік
1.1 Конструктор әдістері
1.2 Келісім бойынша көшірме конструкторы
1.3 Функцияның объектілерді қайтаруы
2 Деструктор туралы түсінік
2.1 Деструктордың негізгі жұмысы
2.2 Кластар, объектілер және жады
2.3 Кластың статикалық берілгендері
2.4 Класс өрістерінің жеке-жеке жариялануы және анықталынуы
3 Операцияларды асыра жүктеу
3.1 Унарлы операцияларды асыра жүктеу
3.2 Постфиксті операция
3.3 Арифметикалық операциялар
Қорытынды
ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР
Кіріспе
Айнымалы өз типіне қандай қатынаста болса, объект те өз класына сондай қатынаста.
Класс анықтамасы class қызметші сөзінен басталып, класс есімі жазылады.
Құрылым сияқты, класс денесі фигуралық жақшаға алынып, нүктелі үтір белгісімен аяқталады.
ОБП - дың негізгі ерекшелігі берілгендерді жасыра алуы.
Бұл терминнің мағынасы мынада: берілгендер класс ішінде орналасқан және кластан тыс орналасқан функциялардың санкциясыз қолданылуынан қорғалған. Егер кейбір берілгендерді қорғау керек болса, онда оларды private қызметші сөзі бар класс бөлігінде орналастыру керек. Мұндай берілгендер тек класс ішінде ғана қолданылады. Public қызметші сөзімен сипатталушы берілгендер кластан тыс та қолданылады.
Private:
Public:
Берілгендер
немесе
функциялар
Берілгендер
немесе
функциялар
Кластың ішінде
қолданылады (жабық)
Кластан тыс (ашық)
қолданылады
Класс құрамына кіретін функциялар класс әдістері болып табылады.
Класс ішіндегі берілгендер мүшелер немесе класс өрістері деп аталады.
Келесі мысалды қарастырайық:
smallobj. сpp
# include iostream. h
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 екі объектісі анықталған. Объектіні анықтау объектіні сақтауға қажетті жады бөлу болып табылады.
Объект есімін класс әдісімен байланыстыру үшін нүкте (.) операциясын қолданады.
Нүкте операциясы класс мүшесін алу операциясы деп аталады.
1 Конструктор туралы түсінік
1.1 Конструктор әдістері
Конструкторда инициализация әдіс прототипі мен функция денесінің арасында орналасқан және қос нүктемен ажыратылады. Инициализацияланатын мән өріс есімімен кейінгі жақшада орналасқан.
Counter ( ) : count (0)
{ }
Егер класс өрістерінің бірнешеуін инициализациялау керек болса, онда мәндер үтірмен бөлініп, инициализация тізімі құрылады.
Программа жұмысының қорытындысы:
с1=0
с2=0
с1=1
с2=2
Конструктордың дұрыс жұмыс істеп тұрғанына көз жеткізу үшін, хабарлама басуын талап етеміз:
Counter ( ) : count (0)
{cout " \n Конструктор \" ;}
Программа жұмысының нәтижесі:
Конструктор
Конструктор
с1=0
с2=0
с1=1
с2=2
Объект құрыларда ерекше класс әдісі - конструктор шақырылады.
1.2 Келісім бойынша көшірме конструкторы
Бұған дейін объектіні инициализациялаудың екі тәсілін қарастырдық. Аргументсіз конструктор объект өрістерін тұрақты мәндермен инициализациялай алады, ал ең болмағанда конструктордың бір аргументі болса өрістерді мәндермен инициализациялай алады.
Өрістерінің мәні анықталған объектіні қолданып объектіні инициализациялаудың үшінші түрі бар. Әрбір класты құратын компилятор үшін келісім бойынша көшірме конструкторы беріледі. Көшірме конструктордың бір ғана аргументі болады және конструктор сияқты сол кластың объектісі болып табылады.
ecopycon. cpp
# include iostream. h
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 " \ ` - " inches ` \ " `;}
};
int main ( )
{ Distance dist1 (11, 6.25);
Distance dist2 (dist1);
Distance dist3 = dist1;
cout "\n dist1 = " dist1. showdist ( );
cout "\n dist2 = " dist2. showdist ( );
cout "\n dist3 = " dist3. showdist ( );
cout endl;
return 0;
}
dist2, dist3 объектілері келісім бойынша көшірме конструкторының көмегімен екі тәсілмен алынған.
1.3 Функцияның объектілерді қайтаруы
Келесі мысалды қарастырйық:
englret. cpp
# include iostream. h
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 " \ ` - " inches ` \ " `;}
Distanse add_dist ( Distanse );
};
Distanse Distanse: : add_dist ( Distanse d2);
{ Distanse temp;
temp. inches = inches + d2. inches;
if ( temp. inches = 12.0)
{ temp. inches - = 12.0;
temp. feet = 1;
}
temp. feet + = feet + d2. feet;
return temp;
}
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 endl;
return 0;
}
temp
feet
inches
feet
inches
feet
inches
temp берілгендері
return add_dist;
операторының
көмегімен
dist3-ке меншіктеледі
dist3 = dist1. aad_dist (dist2)
dist1 dist2
feet d2.feet
inches d2.inches
Құрылымдарды класс ретінде де қолдануға болады. Құрылым мен кластың формальды айырмашылығы мынада: келісім бойынша кластың барлық мүшелері жасырын болады, ал құрылымның барлық мүшелері ашық болады.
рrivate қызметші сөзін класс мүшелері үшін көрсету міндетті емес:
class foo class foo
{ private: { int data1;
int data1; public:
public: void func ( );
void func ( ); };
};
Құрылым үшін public қызметші сөзі келісім бойынша беріледі.
struct foo
{ void func ( );
private:
int data1;
};
Программистер құрылымды берілгендерді біріктіру үшін, ал кластарды берілгендер мен функцияларды біріктіру үшін қолданады.
2 Деструктор туралы түсінік
2.1 Деструктордың негізгі жұмысы
Объектіні жоюда автоматты түрде шақырылатын әдіс деструктор деп аталады. Деструктор есімі конструктор есімімен сәйкес келеді және есім алдында ~ тильда белгісі қойылады.
Объектілерді бірнеше тәсілмен жоя алмайтындықтан деструкторлар мәндерді қайтармайды және аргументтері болмайды.
Деструктордың негізгі жұмысы - объект құруда конструктормен бөлінген жадыны босату.
Class Foo
{ private:
int data;
public:
Foo ( ): data (0)
{ }
~ Foo ( )
{ }
};
Келесі мысалда асыра жүктелген конструктор, әдістердің кластың сыртында анықталуы, объектілерді функцияның аргументі ретінде қабылдауы көрсетілген.
englcon. cpp
# include iostream. h
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 " \ ` - " inches ` \ " `;}
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 endl;
return 0;
}
Мысалда бір Distance() есімімен берілген екі конструктор бар, сондықтан конструктор асыра жүктелген болып табылады.
Жаңа объект құрылыу кезінде қанша аргумент қолдануына байланысты қай конструктор орындалатындығы анықталады.
Класс ішінде класс әдісінің анықталуы міндетті емес.
Класс анықтамасының ішінде тек add_dist ( ) функциясының прототипі бар.
Функияның анықтамасы листингтің басқа жерінде болса да, ол класс әдісі болып табылады. add_dist ( ) функциясы Distance класынан кейін анықталады. add_dist ( ) функциясының есімі анықталарда Distance класының есімі және : : символы тұрады. Бұл белгі кең ауқымды келісім операциясының белгісі болып табылады.
Әдістің кластың сыртында анықталу форматы:
Қайтарылатын_мәннің_типі класс_есімі : : функция_есімі
{ }
: :-келісім операциясы.
Объектілерді функцияға берілу синтаксисі жай айнымалыларды беру синтаксисімен бірдей. Бірақ мынадай маңызды бөліктері бар:
# Класс әдісіне әруақытта класс өрістерін қолдануға мүмкіндік бар (объект (.) операциясы арқылы әдіспен байланысады).
# Класс әдісін басқа да объектілер қолдана алады. Олар оның аргументі түрінде қарастырылады.
Класс әдісінің әрбір шақырылуы осы кластың белгілі бір объектісімен байланысты (статикалық функцияны шақырудан басқа). Әдіс объектінің кез келген, ашық және жабық мүшелерін есімі арқылы тікелей ала алады. Сонымен қатар әдіс нүкте операциясы арқылы өз класының басқа объектілерінің мүшелерін де ала алады, олар әдіс аргументі ретінде қаралады.
add_dist ( ) функциясы мәндерді қайтармайды. Қайтарылатын мәннің типі
void болып табылады. Нәтиже автоматты түрде dist3 объектісіне меншіктеледі.
dist3
feet
inches
feet
inches
feet
inches
dist3 әдісі оның
берілгендерін
тікелей ала алады
dist3. aad_dist (dist1, dist2)
dist1 dist2
dist1. feet dist2. feet
dist1. inches dist2. inches
2.2 Кластар, объектілер және жады
Әрбір объектінің өзінің тәуелсіз берілгендер өрісі болады. Бір кластың барлық объектілері бір әдісті қолданады.
Класты құру кезінде класс әдісі құрылады және бір-ақ рет компьютер жадысына орналастырылады. Әрбір объектінің өз мәндер жинағы бодады, объектілер өрістері жалпы боламуы керек. Объектілерді құруда әрбір берілгендер жинағы жадыдан белгілі бір бос орын алады.
Объект 1 Объект 2 Объект3
data1 data1 data1
data2 data2 data2
function1
function 2
2.3 Кластың статикалық берілгендері
Егер кластың берілгендер өрісі static қызметші сөзімен сипатталса, онда бұл өрістің мәні сол кластың барлық объектілері үшін бірдей болады. Кластың статикалық берілгендері барлық объектілер қандай да бірдей мәндерді бірлесе қолданғанда пайдалы.
Статикалық өріс өз мінездемесі бойынша статикалық айнымалыға ұқсас: ол класс ішіде ғана көрінеді, ал оның өмірінің уақыты программаның өмір сүру уақытымен сәйкес келеді. Бірде бір класс объектісі болмаса да, статикалық айнымалысынан өзгешелігі - кластың статикалық өріс бар болады.
Кластың статикалық айнымалысын қолдану мысалын қарастырайық.
Берілген мезетте әр объекті өзі сияқты жадыда қанша объект бар екендігін білу қажет болсын. Бұл жағдайда класқа count есімді статикалық айнымалыны енгізіеміз. count айнымалысын барлық объектілір көре алады және олардың бәрі бірдей мәнді көреді.
statdata. cpp
# include iostream. h
class foo
{ private:
static int count;
public:
foo ( )
{ count ++;}
int getcount ( )
{ return count; }
};
int foo : : count = 0; count анықтамасы
int main( )
{ foo f1, f2, f3;
cout "Объект саны = " f1. getcount ( ) endl;
cout "Объект саны = " f2. getcount ( ) endl;
cout "Объект саны =" f3. get_count ( ) endl;
return 0; }
f1, f2, f3 объектілері үшін main( ) функциясында конструктор үш рет шақырылады, count өрістерін инкременттеу де үш рет болады.
getcount ( ) әдісі count - ты қайтарады. Барлық жағдайда да бұл әдіс бір мәнді қайтарады.
Объект саны =3
Объект саны =3
Объект саны =3
Егер статикалық емес, автоматты count өрісін қолдансақ, онда конструктор әр объекті үшін бұл өрістің мәнін бірге арттырар еді.
Объект саны =1
Объект саны =1
Объект саны =1
2.4 Класс өрістерінің жеке-жеке жариялануы және анықталынуы
Статикалық өрістерді анықтау жай өрістерді анықтау тәрізді жүргізілмейді. Жай өрістертер жарияланады, яғни компиляторға оның есімі және типі хабарланады, содан соң анықталады, яғни компилятор айнымалыға типіне сәйкес жадыдан орын бөледі. Осының бәрі жалғыз ғана сипаттаудың көмегімен жүргізіледі. Ал статикалық өрістер үшін көрсетілген әрекеттер екі оператордың көмегімен жүргізіледі. Өрісті жариялау кластың ішінде жүргізіледі, ал оны анықтау кластың сыртында орындалады.
Егер статикалық өрістің анықталуы кластың ішінде орналасса, онда класты анықтау оған жадыдан орын бөлуді көрсетпейді деген қағиданы бұзған боламыз. Сондықтан статикалық өрістің анықталуын кластың сыртында орналастыру арқылы программа орындалуын бастағанға дейін оған жадыдан бір рет қана орын бөлінеді.
Объект 2
Объект 1 Объект 3
Автоматты Автоматты Автоматты
өрістер өрістер өрістер
data1 data1 data1
data2 data2 data2
Статикалық өрістер
data3
data4
Статикалық өрістермен кең ауқымды айнымалырадың арасында ұқсастық бар. Статикалық өрістермен жұмыс істеу барысында компилятор тани алмайтын оңай қателіктер ... жалғасы
Ұқсас жұмыстар
Пәндер
- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.
Ақпарат
Қосымша
Email: info@stud.kz