Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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




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

 

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

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

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

 

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);

}

 

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

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

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

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

 


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.012 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал