Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SHPORS~1.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
201.73 Кб
Скачать

19. Перевантаження бінарних операцій.

Бинарный оператор можно определить либо в виде нестатической функции-члена с одним аргументом, либо в виде функции-не-члена с 2 аргументами. Для любого @ выражение aa@bb интерпретируется либо как aa.operator@(bb) либо operator@(aa,bb). Если определены обе функции, для выяснения того, какую из них использовать, применяется механизм разрешения перегрузки. Например: class X{public: void operator+(int); X(int);}; void operator+ (X,X); void operator+(X,double); void f(X,a) {a+1; 1+a; a+1.0};

20. Параметризація типів за допомогою шаблонів.

Шаблон явл мехиназмом параметризации определения класса или функции произвольным типом. Код, реализующий шаблон, идентичен для всех типов параметров, также как и большая часть кода, реализующая шаблон.

Шаблони класів мають вигляд template <список парам>

class ім”я класу{}

template<class T>

class vector {T*v; public: vector (int size);

t& operetor [](int index);

vector<int> v1(10);

vector <complax >v2(30);

typedef vector > cv;

cv v3(40);

v1[1]=7; v2[3]=7;\\?ok; v2[3]=v3[4]\\ok?.

Шабл.типи еквівал., якщо

template<classsT,int i>;

class B {T v[i]}

B<char,40*3> b1;

B<int,20> b2;

B<char,20> b3.

21. Параметризація функцій за допомогою шаблонів.

вона здійснюється так.Оголошення ф-іі

template<список парам>

template<class T>

void sort(vectoe<T>& int n)

void f(vector complax,&cv vector<int>&iv)

{sort(cv)\\sort(vector< complax>&

sort(iv)\\sort(vector<int>&

Це приклад неявноі параметриз.

Розглянемо сумісність шабл.тп нешабл. ф-ій.template <class T>

T max(T &x,T&y){retutr x>y?x:y}

це шабл.ф-я.

void f(int a,b,char c,d) {int l, char f; l=max(a,b); \\max(int&,int&);

f=max(c,d) //max(char&,char&);

l=max(a,c)//er}.

Правила: -якщо визов ф-іі повністю співпадає з іі прототипом то відбів. генералізація (візов), -пошук шабл.ф-іі яку можно утотожніти з визовом ф-іі, -ротиться спроба шляхом неявних перетвор параметрів у вихзові ф-іі привести їх типи до нешабл ф-ій.

22. Перетворення за допомогою конструкторів. Обмеження.

Коли треба перетворити тип користувача на базовий за допомогою кон-ра це можливо х->int

class X{public:operator int()};Для цього зробимо клас з ім”ям як тип який перетворюємо.

class x {public: c(d)};

class x{public : x(int); x(const char *int=0)};

voif f() {x x1=1\\визов кон-ра x(int) х1=х(1)

х х2=”рпр”\\ визов кон-ра x(const char *);

void g(x) {}

g(3)\\ перетвор з типу х

class x{public: x(int)}\\int->x;

class x{public: y(x)}\\y->x

void h(y);

h(3)\\er

23. Перетворення за допомогою перетворюючих функцій.

Коли треба перетворити тип користувача на базовий за допомогою кон-ра це можливо х->int

class X{public:operator int()};.Коли треба використ перетворення з типа користувача Х до штучного типу У.

class X{public:operator int();operator Y();}

class employee {char * name; int code; public: operator int ();}

employee::operator int(){ return code}

тип повертаємого зн-ня та

список параметрів задавати неможна для перетвор-і. ф-іі.

class X {int * operator(int*());\\Er}

operator int *(int);\\Er

operator int*()\\Ok

Перетворюф-ю неможна перевантажити..Ці ф-іі можна наслідувати. н-д

clsass c {public: operator int();}

class d:public c{};

void mane(){ d D; int i=D; cout<<i}.

Приклад показуювий чи може перетвор ф-я бути вірт.

с<-d (наслідуємі перетвор ф-іі)

class c{public: virtual operator char(){return ‘i’}};

class d:public c{public: operator char(){return ‘d’}}

voif f(c *pc,d * pd) {cout<*pc<<’ ‘<<*pd;

pc=new d;

cout<*pc;}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]