Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМКД_ОБП_Урдабаева.doc
Скачиваний:
113
Добавлен:
01.03.2016
Размер:
1.29 Mб
Скачать

Іі. Жұмыстың орындалу реті

1. Теориялық бөліммен танысу.

2. 1 – 3 программалардың жұмысымен танысу.

3. Өзіндік жұмыс тапсырмаларын орындаңыз.

Ііі. Өзіндік жұмыс тапсырмалар

1. string класын анықтаңыз. Ол үшін "+" және "соңына жалғау" ("+=") достық функцияларын анықтаңыз.

2. DATA класын анықтаңыз, ол үшін "+", "-" амалдары орындалады. Достық функцияны қолданыңыз.

3. INT класын анықтаңыз. Ол үшін "+", "-" амалдары орындалады. Достық функцияны қолданыңыз.

4. TIME класын анықтаңыз. Ол үшін "+", "-" амалдары орындалады. Достық функцияны қолданыңыз.

5. FLOAT класын анықтаңыз. Ол үшін "+", "-" амалдары орындалады. Достық функцияны қолданыңыз.

6. VECTOR класын анықтаңыз. Ол үшін "+", "-" амалдары орындалады. Достық функцияны қолданыңыз.

7. MATRIX класын анықтаңыз. Ол үшін "+", "-" амалдары орындалады. Достық функцияны қолданыңыз.

  1. Жұмыс есебі

- Жұмыс тақырыбы мен мақсаты;

- Жұмыстың орындалуы кезінде қойылған сұрақтарға жауап беру;

- Өзіндік жұмыс программасының листингі.

  1. Лабораторялық жұмыс бойынша сұрақтар

  1. Қандай функциялар достық деп аталады?

  2. Достық класстар дегеніміз не?

  3. Достық кластар қалай анықталады?

  4. Достық функциялар қалай анықталады?

ЛАБОРАТОРИЯЛЫҚ ЖҰМЫС № 9-11

ПОЛИМОРФИЗМ. ОПЕРАТОРЛАРДЫ ҚАЙТА ЖҮКТЕУ.

Жұмыс мақсаты: Операторларды қайта жүктеу механизмімен таныстыру.

  1. Қысқаша теориялық мәліметтер

Операторларды қайта жүктеу.

Операторларды қайта жүктеу С++-тегі стандартты типтерге жаңа типтер қосуға мүмкіндік береді. Операторларды қайта жүктеу достық функциялар сияқты хабарланады.

class ZZ {

public:

friend ZZ operator+(ZZa, ZZb);

friend ZZ operator-(ZZa, ZZb);

friend ZZ operator*(ZZa, ZZb);

friend ZZ operator/(ZZa, ZZb);

};

Функция аттары – operator/, operator*, operator-, operator+ operator кілттік сөзінен және оператор символынан тұрады.

Қайта жүктеуге болатын операторлар тізімі:

* / + – % ^ & :

- ! , = < > <= >=

++ — << >> == != && ||

*= /* %= ^= &= |= += -=

<<= >>= -> ->* [] () new delete

Программа 1. Достық функциялар көмегімен операторларды қайта жүктеу мысалы.

#include <iostream.h>

#include <stdlib.h>

#include <string.h>

class TStrOp {

private:

char val[12];

public:

TStrOp() { val[0]=0; }

TStrOp(const char* s);

long GetVal(void) { return atol(val);}

friend long operator+(TStrOp a, TStrOp b);

friend long operator-(TStrOp a, TStrOp b);

};

void main()

{

TStrOp a = "1234";

TStrOp b = "4321";

cout << endl << "value of a == " << a.GetVal();

cout << endl << "value of b == " << b.GetVal();

cout << endl << " a + b + 6 == " << ( a + b + 6 );

cout << endl << " a – b + 10 == " << ( a – b + 10 )

<< endl;

}

TStrOp::TStrOp(const char* s)

{

strncpy(val, s, 11);

val[11]=0;

}

long operator+(TStrOp a, TStrOp b)

{

return (atol(a.val) + atol(b.val));

}

long operator-(TStrOp a, TStrOp b)

{

return (atol(a.val) – atol(b.val));

}

class TStrOp {

private:

char val[12];

public:

TStrOp() { val[0]=0; }

TStrOp(const char* s);

long GetVal(void) { return atol(val);}

long operator+(TStrOp a, TStrOp b);

long operator-(TStrOp a, TStrOp b); };

long TStrOp::operator+(TStrOp b)

{ return (atol(val) + atol(b.val)); }

long TStrOp::operator-(TStrOp b)

{ return (atol(val) – atol(b.val)); }

Программа 2. Индекстеуді қайта жүктеу мысалы.

#include <iostream.h>

class Psevdoarray {

private:

int val0;

int val1;

int val2;

int val3;

public:

Psevdoarray( int v0, int v1, int v2, int v3)

{ val0 = v0; val1 = v1; val2 = v2; val3 = v3;}

int GetInt(unsigned i);

int operator[] (unsigned i);

};

void main()

{

Psevdoarray pa(10, 20, 30,40);

for( int i=0; i<=3; i++)

cout << "pa[" << i << "] ==" << pa[i] << endl;

}

int Psevdoarray::GetInt(unsigned i)

{

switch (i) {

case 0: return val0;

case 1: return val1;

case 2: return val2;

case 3: return val3;

default: return val0;

}

}

int Psevdoarray::operator[](unsigned i)

{

return GetInt(i);

}