Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
21-29.docx
Скачиваний:
1
Добавлен:
25.09.2019
Размер:
28.82 Кб
Скачать

21. Абстрактные классы.

Модификатор abstract задает абстрактный класс, у которого обязательно должны быть наследники. Объект абстрактного класса создать нельзя, хотя статические члены такого класса можно вызвать, используя имя класса. Модификаторы наследования указываются непосредственно перед ключевым словом class:

abstract class AbstractClass { }

Для методов абстрактных классов (классов с модификатором abstract) возможно задать модификатор abstract, который говорит о том, что метод не реализуется в классе, а должен обязательно переопределяться в наследнике.

abstract class AbstractClass

{

//Реализации метода в классе нет

public abstract void AbstractMethod();

}

Например. Абстрактные классы TextReader и TextWriter позволяю читать и записывать данные в поток как последовательность символов. От этих классов наследуются классы StreamReader и StreamWriter.

22. Полиморфизм, виртуальные функции.

При создании иерархии классов некоторые свойства объектов, сохраняя названия изменяются по существу. Для реализации таких иерархий в языке программирования предусмотрен полиморфизм.

Полиморфизм - обеспечивает возможность задания различных реализаций некоторого единого по названию метода для классов различных уровней иерархий. В ООП такой полиморфизм называется простым, а методы имеющие одинаковое название статическими полиморфными.

Конкретные механизмы реализации полиморфизма:

1. Чистый полиморфизм – один код функции по разному интерпретируется в зависимости от типов аргумент:

2. Перезагрузка – определение нескольких функций с одним именем (С++);

3. Переопределение (простой полиморфизм) – конкретный метод определяется телом объекта при компиляции программы (ранее связывание).

4. Полиморфные объекты (сложный полиморфизм) – конкретный метод определяется топим объекта в процессе выполнения программы (позже связывание).

5. Обобщение функции (шаблоны) – используются при реализации в языке параметризованных классов (С++).

Виртуальные методы

Методы для которых должно реализовываться позднее связывание называются виртуальные и описываются словом virtual.

Функция объявляется виртуальной в базовом классе с помощью модификатора virtual. Если для производного класса требуется переопределить свой вариант данной функции, то используется ключевое слово override. Синтаксической ошибкой является одновременное использование обоих модификаторов. Ошибкой является одновременное использование модификаторов new и override.

23. Правила приведения класса (объектов), ключевые слова as, is.

Для проверки принадлежности объекта к какому-либо типу используется параметр is. Синтаксис записи следующий: <выражение> is <тип>. Выражение должно быть ссылочного типа. Результатом является либо true, либо false. Различают неявное (implicit) и явное (explicit) приведение типов (type-cast(ing)). Неявное приведение: автоматически:

Int i = 78;

Long l = I;

i неявно переводится к типу long, т.к. long охватывает большое число значений.

Явное приведение:

Long l = 45;

Int i = (int)l;

Т.к. int более короткий, чем long. Для структурных типов – это единственный способ приведения. Этот же способ работает и для ссылочных типов. Для ссылочных типов существует еще один способ. Это использование оператора as. Оператор as действует по другому: сначала выполняется проверка на соответствие типов, т.е. вызывается оператор is. Если тип преобразовать невозможно, исключение не возникает, а результатом будет нулевая ссылка null.

x is T

Возвращает true, если тип x это T

x as T

Возвращает x, приведенный к типу T, или null

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