Келісім бойынша көшірме конструкторы Бұған дейін объектіні инициализациялаудың екі тәсілін қарастырдық. Аргументсіз конструктор объект өрістерін тұрақты мәндермен инициализациялай алады, ал ең болмағанда конструктордың бір аргументі болса өрістерді мәндермен инициализациялай алады.
Өрістерінің мәні анықталған объектіні қолданып объектіні инициализациялаудың үшінші түрі бар. Әрбір класты құратын компилятор үшін келісім бойынша көшірме конструкторы беріледі. Көшірме конструктордың бір ғана аргументі болады және конструктор сияқты сол кластың объектісі болып табылады.
// ecopycon. 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 < };
int main ( )
{ Distance dist1 (11, 6.25);
Distance dist2 (dist1);
Distance dist3 = dist1;
cout << ”n dist1 = “ < cout << ”n dist2 = “ < cout << ”n dist3 = “ < cout < return 0;
}
dist2, dist3 объектілері келісім бойынша көшірме конструкторының көмегімен екі тәсілмен алынған.
Функцияның объектілерді қайтаруы Келесі мысалды қарастырйық:
// englret. 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 < 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 < return 0;
}
temp
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;
};
Программистер құрылымды берілгендерді біріктіру үшін, ал кластарды берілгендер мен функцияларды біріктіру үшін қолданады.
Кластар, объектілер және жады Әрбір объектінің өзінің тәуелсіз берілгендер өрісі болады. Бір кластың барлық объектілері бір әдісті қолданады.
Класты құру кезінде класс әдісі құрылады және бір-ақ рет компьютер жадысына орналастырылады. Әрбір объектінің өз мәндер жинағы бодады, объектілер өрістері жалпы боламуы керек. Объектілерді құруда әрбір берілгендер жинағы жадыдан белгілі бір бос орын алады.
Объект 1 Объект 2 Объект3
data1 data1 data1
data2 data2 data2
function1
function 2