Программирование >>  Элементы языков с и с++ 

1 ... 50 51 52 [ 53 ] 54 55 56 ... 200


поместить экземпляр этой метки в форму (экземпляр 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.



1 ... 50 51 52 [ 53 ] 54 55 56 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика