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

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

  1. Позднее связывание. Виртуальные функции.

При ранньому зв'язуванні визов функції підготовлюється під час компіляції,а при пізній – під час виконання програми.

Раннє зв’язування означає,що всю інформацію,яку необхідно для визову функції відома. Прикладом можу бути звичайна функція.

При пізньому зв’язуванні не відомо точно яку функцію буде викликати програма. Прикладом може бути віртуальна функція.

Віртуальними методами називаються такі функції, які оголошуються як virtual в базовому класі. Віртуальні методи відрізняються тим, що вони можуть бути перевизначені в одному або декількох похідних класів.

Особливості С#: перед всіма методами у похідному класі які будуть перевизначати метод базового класа ми повинні писати override.

  1. Особенности описания и использования виртуальных функций в с и с#

Віртуальними методами називаються такі функції, які оголошуються як virtual в базовому класі. Віртуальні методи відрізняються тим, що вони можуть бути перевизначені в одному або декількох похідних класів.

C++

Приклад:

class base_class

{ public: virtual void metod()

{cout<<”Метод Базовий!”; }

}

class Class1_class: public base_class

{ public: void metod()

{cout<<”Метод Class1!”; }

}

class Class2_class: public base_class

{ public: void metod()

{cout<<”Метод Class2!”; }

}

…// в основній програмі

base_class obj_base;

Class1_class obj_class1;

Class2_class obj_class2;

base_class *REF; //посилання на базовий клас

REF=&obj_base;

REF->metod();

REF=&obj_class1;

REF->metod();

REF=&obj_class2;

REF->metod();

C#

Особливості С#: перед всіма методами у похідному класі які будуть перевизначати метод базового класа ми повинні писати override.

Приклад:

class base_class

{ public virtual void metod()

{Console.WriteLine(“Метод Базовий!”); }

}

class Class1_class: base_class

{ public override void metod()

{Console.WriteLine(“Метод Class1!”); }

}

class Class2_class: base_class

{ public override void metod()

{Console.WriteLine(“Метод Class2!”); }

}

…// в основній програмі

base_class obj_base=new base_class();

Class1_class obj_class1=new Class1_class();

Class2_class obj_class2=new Class2_class();

base_class REF; //посилання на базовий клас

REF=obj_base;

REF.metod();

REF=obj_class1;

REF.metod();

REF=obj_class2;

REF.metod();

Результат виконання програми на С++ та на С#:

Метод Базовий!

Метод Class1!

Метод Class2!

  1. Различия между перегруженными и виртуальными функциями.

При перевизначені віртуального метода у похідному класі він повинен мати той самий тип, кількість і самі параметри, що і в базовому. Якщо цього не додримуватися, то цей метод стає перегруженим. Перегружений метод вже не є віртуальним, тому він не перевизначає наш віртуальний метод з базового. Тому при визові метода з об’єкта, що посилається на базовий клас буде викликатися наш метод з базового класу, а не з похідного як це буде відбуватися при перевизначенні віртуального класу.

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