Главная » Статьи » C++ » Статьи по С++ |
Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!
Через минуту Вы получите "Гостевой доступ"
Полиморфизм C++
Полиморфизмом в программировании называется переопределение наследником функций-членов базового класса, например class Figure { В этом примере, какая из функций будет вызвана — Circle::Draw(), Square::Draw() или Figure::Draw(), определяется во время компиляции. К примеру, если написать Figure* x = new Circle(0,0,5); то будет вызвана Figure::Draw(), поскольку x — объект класса Figure. Такой полиморфизм называется статическим. Но в C++ есть и динамический полиморфизм, когда вызываемая функция определяется во время выполнения. Для этого функции-члены должны быть виртуальными. class Figure { В этом случае для каждого элемента будет вызвана Square::Draw() или Circle::Draw() в зависимости от вида фигуры. Чисто виртуальной функцией называется функция-член, которая объявлена со спецификатором = 0: class Figure { Чисто виртуальная функция может быть оставлена без определения, кроме случая, когда требуется произвести её вызов. Абстрактным классом называется такой, у которого есть хотя бы одна чисто виртуальная функция-член. Объекты таких классов создавать запрещено. Абстрактные классы часто используются как интерфейсы. ДрузьяФункции-друзья — это функции, не являющиеся функциями-членами и тем не менее имеющие доступ к защищённым и собственным полям и функциям-членам класса. Они должны быть описаны в теле класса как friend. Например: class Matrix { Здесь функция Multiply может обращаться к любым полям и функциям-членам класса Matrix. Существуют также классы-друзья. Если класс A — друг класса B, то все его функции-члены могут обращаться к любым полям и функциям членам класса B. Например: class Matrix { Однако в С++ не действует правило «друг моего друга — мой друг». По стандарту C++03 вложенный класс не имеет прав доступа к закрытым членам объемлющего класса и не может быть объявлен его другом (последнее следует из определения термина друг как нечлена класса). Тем не менее, многие широко распространённые компиляторы нарушают оба эти правила (по всей видимости, ввиду совокупной странности этих правил). | |
Просмотров: 4566 | | |
Выразить благодарность - Поделиться с друзьями!
Всего комментариев: 0 | |