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

Наслідування в С# відбувається коли в похідному класі ми після назви самого класа ставимо дві крапки «:» і пишемо назву класа який у нас є базовим.

Приклад:

class base_class

{

public int i;

}

class other_class:base_class

{

void test()

{

i=2;

}

}

  1. Переопределение наследованных членов в языках С++ и С#.

В С++ ми можемо злегкістю перевизначати наслідувальні члени новими членами вже похідного класу.

Крім того, ми можемо отримати доступ до члена данних який був визначений у базовому класі.

Приклад:

class base_class

{

public: int i;

}

class other_class:public base_class

{

public: int i;

}

void main()

{

other_class obj;

obj.i=3; //доступ до перевизначеного похідного члена-данних

obj. base_class::i=5; //доступ до базового члена-данних }

В С# по суті перевизначення відбувається аналогічно С++. Але в випадку коли ми напишемо в похідному класі саме перевизначення таким чином public: int i,то компілятор видасть нам повідомлення в якому буде попереджати, що член-данних і який був в базовому класі буде скритим. Для уникнення таких повідомлень слід писати ключове слово new перед перевизначенням. Для того щоб отримати доступ до базового члена-данних нам потрібно використати ключове слово base.

Приклад.

class base_class

{

public int i;

}

class other_class: base_class

{

public new int i;

public void test()

{

i=2; //доступ до перевизначеного похідного члена-данних

base.i=3; //доступ до базового члена-данних }

}

  1. Приведение типов в иерархии наследования в языках С++ и С#.

В С++ для того щоб привести об’єкти ми повинні використовувати вказівники.

base_class *obj1=new base_class();

other_class *obj2=new other_class();

obj2=(other_class *)obj1;

obj1=(base_class *)obj2;

obj1= obj2;

В С# для того щоб привести об’єкт базового класа до похідного викоритовують явне приведення.

obj2 = (other_class)obj1; // obj1-об’єкт базового класа(base_class), obj2-об’єкт похідного класа(other_class).

І навпаки НЕявно коли приводиться об’єкт похідного класу до базового

obj1 =obj2; // obj1-об’єкт базового класа(base_class), obj2-об’єкт похідного класа(other_class).

  1. Открытое, защищенное и закрытое наследование в С++.

Від того з яким специфікатором похідний клас наслідує базовий і буде залежати який рівень доступу буде мати члени-данних базового класу у об’єктах похідного. Але на рівень доступу також впливає,те який специфікатор використовував кожен член данних в базовому класі.

В С++ ми можемо за допомогою спецільного опису змінити рівень доступу до унаслідуваного члена-данних.

Приклад:

class base_class

{public: int i;}

class other_class: private base_class

{public: base_class::i;}

В цьому прикладі по при те, що клас наслідується специфікатором private, він повертається у похідному класі до рівня доступу public.

  1. Множественное наследование в С++.

Похідний клас у С++ може наслідувати декілька базових класів.

Прицьому кожен з різними специфікаторами.

Приклад:

class base1_class {…}

class base2_class {…}

class other_class: private base1_class, public base2_class {…}

  1. Реализация наследования на основе прямых базовых классов в С++.

Н а схемі зображено, що клас А прямо наслідує клас В та клас С.

  1. Реализация наследования на основе непрямых разделенных базовых классов в С++.

Н а схемі зображано, що клас А прямо наслідує клас В,а клас В в свою чергу прямо наслідує клас С, а ось клас А непрямо наслідує клас С.

  1. Реализация наследования на основе непрямых виртуальных базовых классов в С++.

П рипустимо ситуацію в якій клас А наслідує два класа В,С, а вони в свою чергу наслідують клас BASE. В цьому випадку у об'єкта класу А буде «дві копіі» членів данних класу BASE. Тому якщо в класі BASE буде зміннна,наприклад, i, то в класі А ми не зможемо до неї просто дістатися. Нам потрібно буде кожного разу вказувати з якого класу брати цю змінну.Наприклад, B::i або С::і.

Але коли нам потрібно тільки одна копія класу BASE, то потрібно вказувати коли клас В і С наслідують клас BASE, що він був virtual тобто мав одну копію. Тоді в класі А, ми можемо звертатися до змінно і, як до звичайної, тому що копія її тепер одна.

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