- •Вопросы на модульную контрольную №2
- •По дисциплине «Объектно-ориентированная парадигма»
- •Перегрузка операций. Общие положения.
- •Перегрузка унарных операций в с#.
- •Перегрузка бинарных операций в с#.
- •Перегрузка операторов приведения типа в с#
- •Индексаторы в с#. Перегрузка индексаторов.
- •Свойства в с#.
- •Наследование. Общие положения.
- •Реализация одиночного наследования в с#.
- •Полиморфизм. Общие положения.
- •Позднее связывание. Виртуальные функции.
- •Особенности описания и использования виртуальных функций в с и с#
- •Различия между перегруженными и виртуальными функциями.
- •Переопределение виртуальных функций в с#.
- •Абстрактные классы. Чистые виртуальные функции.
- •Интерфейсы. Общие положения.
- •Реализация интерфейсов. Использование интерфейсных ссылок.
- •Обработка исключительных ситуаций. Общие положения.
- •Повторная генерация исключений. Вложенные блоки try.
Перегрузка бинарных операций в с#.
В С# (на відміну від С++) в параметрах передається два операнда. Так як операторна функція в C# є статичною (тобто однією для ВСІХ екземплярів класа) вона не має операнда «господаря».
Приклад:
class name_class
{
int i;
//Перегрузка операції +
public static name_class operator + (name_class obj1, name_class obj2)
{
name_class obj_temp=new name_class();
obj_temp.i= obj1.i+obj2.i;
return obj_temp;
}
}
Использование дружественных функций для перегрузки операций в С++
Якщо з ліва у нас стоїть операнд НЕ об’єкт класу (наприклад, ціле число типу int) ми використовуємо дружню функцію.
Приклад:
class name_class
{
int i;
public:
friend name_class operator+ (int number, name_class obj1)//Перегрузка операції+
{
name_class obj_temp;
obj_temp.i= number +obj1.i;
return obj_temp;
}
}
Перегрузка операторов приведения типа в С++.
В С++ ми можемо перегружати оператори приведення типів.
Пиклад:
class name_class
{
int x;
public: operator int()
{
return x;
}
}
name_class operator= (int i)
{
class_obj obj_temp;
obj_temp.x=i;
return obj_temp;
}
Перегрузка операторов приведения типа в с#
В С# ми можемо перегружати оператори приведення типів.
Для цього ми використуваємо два ключових слова:
explicit-явно x=(int)obj;
implicit-не явно x=obj;
Приклад:
class name_class
{
int i;
public static implicit operator int(name_class obj) //x=obj;
{
return obj.i;
}
public static explicit operator name_class (int a) //obj=(name_class)x;
{
name_class obj_temp=new name_class();
obj_temp.i=a;
return obj_temp;
}
}
Индексаторы в с#. Перегрузка индексаторов.
Індексатор в C# - це можливість перевантажити «квадратні дужки». []
Прицьому використовується спеціальний інструмент аксесор.
Приклад:
class name_class
{
int[] a=new int[5];
public int this[int i]
{
get { return a[i];}
set { a[i]=value;} }
}
В блоці get ми повертаємо і-тий елемент масива в програму. В блоці set ми присвоюємо і-тому елементу масива значення, що знаходиться в правій частині основної програми (наприклад, obj[3]=5, //obj.a[3]=5) Воно передається через ключове слово value. (в прикладі, obj[3]=5, ключове слово value=5).
Свойства в с#.
Властивість в С# допомагає нам отримати або записати значення члена-данних який є закритим.
Прицьому використовується спеціальний інструмент аксесор.
Приклад:
class name_class
{
int i;
public int I
{
get { return i;}
set { i=value;} }
}
В блоці get ми повертаємо значення закритого члена данних i в програму. В блоці set ми присвоюємо закритого члена данних i значення, що знаходиться в правій частині основної програми (наприклад, obj.I=2, //obj.i=2) Воно передається через ключове слово value. (в прикладі, obj.I=2, ключове слово value=2).
Наследование. Общие положения.
Наслідування - це один із трьох основних принципів об’єктно-орієнтованого програмування. Використовуючи наслідування, можна створити загальний клас, котрий визначає характеристики які властиві багатьом зв’язаним елементам. Цей клас потім може бути унаслідуваний другим вузькоспеціалізованим класом з додаванням в кожний із них свої, унікальні особливості.
В стандартній термінології мов програмування клас, котрий унаслідується, називається базовим, а клас який наслідує базовий, називається похідним. Похідний клас може використовуватися в якості базового для інших похідних класів. Таким чином і будується багаторівнева ієрархія класів.
Похідний клас наслідує всі члени данних, крім конструкторів,диструкторів та членів, що мають закритий рівень доступу (private-члени).
Реализация одиночного наследования в С++. ?Конструктор
Наслідування в С++ відбувається коли в похідному класі ми після назви самого класа ставимо дві крапки «:» і пишемо зі специфікатором назву клас який у нас є базовим.
За замовчуванням специфікатор у нас private.
Всі члени-данних базового класа які наслідуються з використанням ключового слова private є закритими членами-данних похідного класа.
Приклад:
class base_class
{
public: int i;
}
class other_class: private base_class
{
void test()
{
i=2; }
}