Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_(2модуль)_v_0_3.doc
Скачиваний:
0
Добавлен:
13.09.2019
Размер:
167.94 Кб
Скачать

Вопросы на модульную контрольную №2

v.0.3

По дисциплине «Объектно-ориентированная парадигма»

  1. Перегрузка операций. Общие положения.

В мовах програмування С++ та С# дозволяється визначати призначення оператора по відношенню до створеного класу. Цей процес називається перевантаженням оператора. Він нам допомагає самім створити особливі дії для певної операції (арифметичної,логічної і т.д.).

НЕможна перегружати:

C++ . :: .* ?

якщо використовується (friend),то не можна ще такі = () [] ->

С# && () . ? ?? [] || = => -> as checked default is new sizeof typeof unchecked

  1. Перегрузка унарных операций в С++.

При перевантажені унарних операцій в С++ ми НЕ повинні передавати ніяких параметрів.(крім випадків дружньої функції,та коли ми передаєм спеціальних параметр,що вказує на постфіксну форму)

Операнд передається «неявно». Він є «господарем» цієї функції.

Приклад:

class name_class

{

int i;

public:

name_class operator++ () //Перегрузка операції ++ (префіксна форма)*

{

i++

return *this;

}

name_class operator++ (int s) //Перегрузка операції ++ (постфіксна форма)

{

name_class obj=*this;

i++

return obj; }

}

*В цьому прикладі слід зауважити,що при створені ТІЛЬКИ префіксной форми компілятор буде обраховувати однаково як префіксну (++obj) так і постфіксну (obj++) форми. А при створення,другої (з параметром s який нам більше не знадобиться) ми можемо робити спеціальні умови обрахування постфіксной форми (obj++). Наприклад,в даному прикладі в префіксній формі (++obj) програма буде спочатку робити обрахування,а потім повертати значення в основну програму, наприклад, якщо нам потрібно присвоїти результат.В постфіксній формі (obj++) програма спочатку збереже результат,потім збільшить наш член класу i на одиничку,а в саму програму поверне значення яке було до додаванні одиниці.

Приклад:

obj.i=1;

obj_rez = ++obj; //obj.i =2; obj_rez.i =2; (префіксна форма ++obj)

obj.i=1;

obj_rez = obj++; //obj.i =2; obj_rez.i =1; (постфіксна форма obj++)

  1. Перегрузка унарных операций в с#.

В С# (на відміну від С++) в параметрах передається операнд. Так як операторна функція в C# є статичною (тобто однією для ВСІХ екземплярів класа) вона не має операнда «господаря».

Приклад:

class name_class

{

int i;

//Перегрузка операції ++*

public static name_class operator ++ (name_class obj)

{

obj.i++;

return obj;

}

}

*В С# (на відміну від С++) префіксна і постфіксна форми визначаються автоматично (компілятором).

  1. Перегрузка бинарных операций в С++.

При перевантажені бінарних операцій в С++ ми повинні передавати ТІЛЬКИ правий операнд.(крім випадків дружньої функції)

Лівий же операнд передається «неявно». Він є «господарем» цієї функції.

Приклад:

class name_class

{

int i;

public:

name_class operator+ (name_class obj2) //Перегрузка операції +

{

name_class obj_temp;

obj_temp.i=i+obj2.i;

return obj_temp;

}

name_class operator= (name_class obj2) //Перегрузка операції =

{

i=obj2.i;

return *this;

}

}

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