- •Вопросы на модульную контрольную №2
- •По дисциплине «Объектно-ориентированная парадигма»
- •Перегрузка операций. Общие положения.
- •Перегрузка унарных операций в с#.
- •Перегрузка бинарных операций в с#.
- •Перегрузка операторов приведения типа в с#
- •Индексаторы в с#. Перегрузка индексаторов.
- •Свойства в с#.
- •Наследование. Общие положения.
- •Реализация одиночного наследования в с#.
- •Полиморфизм. Общие положения.
- •Позднее связывание. Виртуальные функции.
- •Особенности описания и использования виртуальных функций в с и с#
- •Различия между перегруженными и виртуальными функциями.
- •Переопределение виртуальных функций в с#.
- •Абстрактные классы. Чистые виртуальные функции.
- •Интерфейсы. Общие положения.
- •Реализация интерфейсов. Использование интерфейсных ссылок.
- •Обработка исключительных ситуаций. Общие положения.
- •Повторная генерация исключений. Вложенные блоки try.
Вопросы на модульную контрольную №2
v.0.3
По дисциплине «Объектно-ориентированная парадигма»
Перегрузка операций. Общие положения.
В мовах програмування С++ та С# дозволяється визначати призначення оператора по відношенню до створеного класу. Цей процес називається перевантаженням оператора. Він нам допомагає самім створити особливі дії для певної операції (арифметичної,логічної і т.д.).
НЕможна перегружати:
C++ . :: .* ?
якщо використовується (friend),то не можна ще такі = () [] ->
С# && () . ? ?? [] || = => -> as checked default is new sizeof typeof unchecked
Перегрузка унарных операций в С++.
При перевантажені унарних операцій в С++ ми НЕ повинні передавати ніяких параметрів.(крім випадків дружньої функції,та коли ми передаєм спеціальних параметр,що вказує на постфіксну форму)
Операнд передається «неявно». Він є «господарем» цієї функції.
Приклад:
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++)
Перегрузка унарных операций в с#.
В С# (на відміну від С++) в параметрах передається операнд. Так як операторна функція в C# є статичною (тобто однією для ВСІХ екземплярів класа) вона не має операнда «господаря».
Приклад:
class name_class
{
int i;
//Перегрузка операції ++*
public static name_class operator ++ (name_class obj)
{
obj.i++;
return obj;
}
}
*В С# (на відміну від С++) префіксна і постфіксна форми визначаються автоматично (компілятором).
Перегрузка бинарных операций в С++.
При перевантажені бінарних операцій в С++ ми повинні передавати ТІЛЬКИ правий операнд.(крім випадків дружньої функції)
Лівий же операнд передається «неявно». Він є «господарем» цієї функції.
Приклад:
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;
}
}