Полиморфизм
Полиморфизм – это третий принцип, лежащий в основе создания класса. При полиморфизме (дословно: многоформие) родственные объекты (т.е. происходящие от общего родителя) могут вести себя по-разному в зависимости от ситуации, возникающей в момент выполнения программы. Чтобы добиться полиморфизма, надо иметь возможность один и тот же метод в классе-родителе переопределить в классе-потомке. Например, в С++ все классы имеют общего прародителя – это класс Object. В этом классе определен метод draw (рисовать фигуру). Классы, рисующие различные фигуры и произошедшие от Object, -родственные классы. Каждый из них определяет рисование своей фигуры методом draw,унаследованным от Object: точку, линию, прямоугольник, окружность и т.д. Но все фигуры разные, хотя метод общий. Но этот метод drawв каждом из классов-потомков переопределен, т.е. в каждом классе-потомке ему назначена другая функциональность.
Полиморфизм достигается за счет того, что методам из класса-родителя позволено выполняться в классе-потомке, а там оставляют только имя, но при этом дают ему необходимую для данного класса функциональность. Такие методы должны объявляться в обоих классах с атрибутом virtual, записываемым перед атрибутом «возвращаемый тип данных». Если функция имеет атрибут virtual, то она может быть переопределена в классе-потомке, даже если количество и тип ее аргументов такие, что и функции базового класса. Переопределенная функция отменяет функцию базового класса.
Кроме атрибута virtual,у методов существует атрибут friend. Методы с таким атрибутом, расположенным (как и атрибут virtual) в объявлении метода перед указанием типа возвращаемых данных, называются дружественными. Метод, объявленный с атрибутом friend,имеет полный доступ к членам класса, расположенным в секциях privateи protected,даже если этот метод – не член этого класса. Это справедливо и для классов: внешний класс (т.е. его методы) имеет полный доступ к классу, который объявляет этот внешний класс дружественным. Во всех остальных аспектах дружественный метод – это обычный метод. Подобные методы из внешних классов, имея доступ к секциям privateи protected, могут решать задачи, реализация которых с помощью методов-членов данного класса затруднительна или даже невозможна.
Дата добавления: 2015-07-30; просмотров: 662;