|
Программирование >> Элементы языков с и с++
поместить экземпляр этой метки в форму (экземпляр Form), то свойство шрифт метки примет значение свойства шрифт из экземпляра Form. Меняя параметры шрифта у родителя (Form), мы добиваемся изменения этих параметров у потомков (наследников). То есть метка автоматически будет наследовать это свойство от экземпляра Form, на который она помешена. Это же относится, например, и к классу Button (кнопка). Пример только что сказанного показан на рис. 8.1, из которого видно, как изменяется шрифт компонентов Кнопка и Метка В Зависимости от изменения шрифта в форме. Кнопка! Метка Размер шрифта формы равен 12 Кнопка1 Метка 1 Размер шрифта формы равен 20 Рис. 8.1. Наследование свойства шрифт потомками от родителя Мы не ставим своей целью разработку классов (как было отмечено в начале этой главы), но знать основные данные классов необходимо, т. к. иначе невозможно ими пользоваться при построении приложений в среде VC++. Рассмотрим структуру базового класса, из которого могут создаваться классы-потомки. Объявление класса представлено в листинге 8. i. Листинг 8.1 class <имя> { private: /*Имя секции. Данные и методы, помещенные в эту секцию, будут доступны только методам этого класса. Доступ к ним методам производных классов запрещен*/ <Приватные данные> <Приватные конструкторы> <Приватные методы> оащищенные данные оащищенные конструкторы> Оащищенные методы> public: /* Имя секции. Данные и методы, помещенные в эту секцию, будут доступны методам всех классов. * / <общедоступные данные> <общедоступньЕ конструкторь1> общедоступный деструктор> <общедоступные методы> j); /*обратите внимание, что также заканчивается и объявление структу-ры*/ Глядя на то, как объявляется класс, вспомним пример из разд. Структуры твы 7, где речь шла о том, что для структур в языке С++ можно задавать секции private, public, protected. Эти же секции можно задавать и для классов. Как и для структур, в этих секциях можно определять функции (в классах - это методы), а вызывать методы на выполнение можно только в соответствии с тем, в какой секции находится функция. Атрибуты private, public, protected называются атрибутами доступа к членам класса. В классах методы вызываются так же, как если бы они находились в структуре: имя (экземпляра).f(фактические параметры функции); А все эти сходства оттого, что в С++ структуры рассматриваются тоже как классы. Полиморфизм Полиморфизм- это третий принцип, лежащий в основе создания класса. При полиморфизме (дословно: многоформие) родственные объекты (т. е. происходящие от общего родителя) могут вести себя по-разному в зависимости от ситуации, возникающей в момент выполнения программы. Чтобы добиться полиморфизма, надо иметь возможность один и тот же метод в классе-родителе переопределить в классе-потомке. Например, все классы имеют общего прародителя - класс object. В этом классе определен мегод draw (рисовать фигуру). Классы, рисующие различные фигуры и произо- protected: /*Имя секции. Данные и методы, помещенные в эту секцию, будут доступны методам этого класса и производным от него, т.е его потомкам*/ шедшие от object - родственные классы. Каждый из них определяет рисо- вание своей фигуры методом draw, унаследованным от object: точку, линию. прямоугольник, окружность и т. д. Но все фигуры разные, хотя метод общий. Но этот метод draw в каждом из классов-потомков переопределен, т. е. в ка- ждом классе-потомке ему назначена другая функциональность. Полиморфизм достигается за счет того, что методам из класса-родителя по-1 зволено выполняться в классе-потомке, а там оставляют только его имя, но при этом дают ему необходимую для данного класса функциональность. Та-, кие методы должны объявляться в обоих классах с атрибутом virtual, запи- сываемом перед атрибутом возвращаемый тип данных . Если функция имеет атрибут virtual, то она может быть переопределена в классе-потомке, j даже если количество и тип ее аргументов такие же, что и у функции базово- го класса. Переопределенная функция отменяет функцию базового класса. Кроме атрибута virtual, у методов существует атрибут friend. Методы с таким атрибутом, расположенным (как и атрибут virtual) в объявлении ме- тода перед указанием типа возвращаемых данных, называются дружествен-] ными. Метод, объявленный с атрибутом friend, имеет полный доступ к членам класса, расположенным в секциях private и protected, даже если этот метод- не член этого класса. Это справедливо и для классов: внешний класс (т. е. его методы) имеет полный доступ к классу, который объявляет этот внешний класс дружественным. Во всех остальных аспектах дружественный метод- это обычный метод. Подобные методы из внешних классов, имея доступ к секциям private и protected, могут решать задачи, реализация которых с помощью методов-членов данного класса затруднительна или даже невозможна. Примеры создания классов Приведем пример двух программ, в которых объявлены и использованы простейшие классы. Пример 1 Программа показана в листинге 8.2, результат работы программы-на] рис. 8.2.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |