Шаг 73.
Microsoft Visual C++ 2010. Язык С/С++.
Классы в C++. Принципы построения классов. Полиморфизм

    На этом шаге мы рассмотрим понятие полиморфизма.

    Полиморфизм - это третий принцип, лежаший в основе создания класса. При полиморфизме (дословно: многоформие) родственные объекты (т. е. происходящие от общего родителя) могут вести себя по-разному в зависимости от ситуации, возникающей в момент выполнения программы. Чтобы добиться полиморфизма, надо иметь возможность один и тот же метод в классе-родителе переопределить в классе-потомке.

    Например, все классы имеют общего прародителя - класс Object. В этом классе определен метод draw (рисовать фигуру). Классы, рисующие различные фигуры и произошедшие от Object, - родственные классы. Каждый них определяет рисование своей фигуры методом draw, унаследованным от Object: точку, линию, прямоугольник, окружность и т. д. Но все фигуры разные, хотя метод общий. Но этот метод draw в каждом из классов-потомков переопределен, т. е. в каждом классе-потомке ему назначена другая функциональность.

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

    Кроме атрибута virtual, у методов существует атрибут friend. Методы с таким атрибутом, расположенным (как и атрибут virtual) в объявлении метода перед указанием типа возвращаемых данных, называются дружественными. Метод, объявленный с атрибутом friend, имеет полный доступ к членам класса, расположенным в секциях private и protected, даже если эте метод - не член этого класса. Это справедливо и для классов: внешний класс (т. е. его методы) имеет полный доступ к классу, который объявляет этот внешний класс дружественным.

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

    На следующем шаге мы рассмотрим примеры программ, использующих классы.




Предыдущий шаг Содержание Следующий шаг