Функция-мшелер. Дерек-мшелер. Кластарды элементтеріне жіберуді басару

 

С ++-те дісті класты функция-мшесі деп атау абылданан, жариялауларды жіберу туралы деп класты функция-мшесін шаыру туралы сияты айтылады.

 

• Функция-мшелер - бл класты деректер-мшелерімен манипуляция жасайтын

 

функция

• Функция-мшелер з класыны барлы рісіне кіре алады.

• Функция-мшелер класты жабы оралан жне ашы блігінде болады

• Функция-мшелер класты ішкі немесе тыс (C++) жариялауында аныталуы ммкін. Класты тыс аныталан функция-мшелер inlineжасалады.

• Функция-мшелер олардан кейін жарияланан рістерге немесе функция-мшелерге арайды.

• Функция-мшелерде айын емес жарияланан айнымалы this болады.

• Функция-мшелер static болады. Бндай функциялар класты статикалы рісіне тікелей кіріп згерте алады. Класты статикалы функция-мшелері const немесе virtual деп жариялай алмайды. Бндай функциялара объектіні наты данасыны атынан емес, класты атынан ана арауа болады.

 

Листинг4.5.

Class Shape {

Static int num; point center; public:

 

shape (Point c): center (c) {++num;} ~Shape() {--num;}

Static int Num(){return num;} };

Int Shape::num=0; Void main()

 

{cout <<Shape ::Num(); //0 Shape s;

Cout <<Shape::Num();//1

for (int n=Shape::Num(); n>0; n--){}

}

 

• Функция-мшелер constсияты жарияланады, бнда олара шамасын

 


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

 

№7 лекция. Конструкторлар жне деструкторлар: Жасау дісі жне инициализациялау. С++-тегі жасау дісі жнеинициализациялау. Конструкторлар. Конструкторлар жне объектілерді массивтері

 

Конструкторы бар класс объектілеріні векторын сипаттау шін бл класта параметрді тізімінсіз шаыратын конструктор болу керек. ндемеу бойынша параметрлерді де олдануа болмайды. Мысалы:

 

table tblvec[10];

 

егер параметрсіз конструктор жо болса, ате болады, йткені table::table(int sz=10) шін бтін параметр ажет. Вектор сипаттамасында конструкторды параметрін беру эдісі жо. table кестесіні векторын сипаттау шін table сипаттамасын модификация жасау керек, мысалы былай:

 

class table {    
void init (int sz) ; // ескі конструктор сияты
public:        
table (int sz) { i n i t (s z ); } /*брыныдай біра ндемеу бойынша емес*/
tabl e () { init (10); } //ндемеу бойынша
};        

 

Вектор жойылан кезде , деструктор осы векторды р элементі шін шаырылады. new кмегімен орналаспаан векторлар шін ол айын емес жасалады. Біра-та бос жадыдаы векторлар шін бл айын жасалмайды, себебі компилятор бір объектке баытталан нсауышты объектілер векторыны бірінші элементке баытталан нсауышынан ажырата алмайды. Мысалы:

 

void f() {

table * t1 = new table; table * t2 = new table[10]; table * t3 = new table[10]; delete t1; // бір кесте

 

delete t2; // болмайды: 10 кестелер delete[] t3;

}

 

Компилятор белгіленген жадыны ішінен векторды элементтеріні санын таба алмайды, йткені бос жадыны таратушысы тілді блігі болып табылмайды жне оны программист береді.

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

 


class Phone { int a,b,c; public:

Phone(int al,int bl,int cl) :a(al) , b (bl) , с(cl) {} };

 

Phone office []={/*Компиляторзімлшердіесептейді*/

900, 800, 905, 6 7 8 , 4 5 6 , 5 4 6 };

Phone office [ 3 ] ={/*ндемеу бойынша конструктор керек,олPhone-да жо*/

890, 790,343, 238, 279, 564 };

 

class int{

int *v, size, top; public:

int pop();

int Top() const; /*бірдемені згерте алмайды*/

};

Void а =s.Top(); /*Дрыс: Top()константа мшесі*/ Int b=s.Pop(); /*ате: sмодификацияланбайды*/

 

}

 

class A{ int a; public:

A() {a=10; }

int & get() const; /*ате сілтемені айтарады*/}; int & A::get() const;{

return a;}

int main (int argc, char* argv[]){A b; cout << “ ” b.get();

return 0;

}