Принципы построения классов. Наследование

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

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

   
Наследование используется не только при разработке классов, но и при проектировании приложения. Например, в VC++
есть класс Label (метка). Есл поместить экземпляр этой метки в форму (экземпляр Form), то свойство
"шрифт" (Font) метки примет значение свойства "шрифт" из экземпляра Form. Mеняя
параметры шрифта у родителя (Form), мы добиваемся изменения этих параметров у потомков (наследников).
То есть метка автоматически будет наследовать это свойство от экземпляра Form, на который она помещена.
Это же относится, например, и к классу Button (кнопка).

   
Пример, иллюстрирующий сказанное, показан на рисунке 1, из которого видно, как изменяется шрифт компонентов
кнопка и метка в зависимости от изменения шрифта в форме.


Рис.1. Наследование свойства "шрифт" потомками от родителя

   
Мы не ставим своей целью разработку классов, но знать основные данные классов необходимо, т. к. иначе невозможно
ими пользоваться при построении приложений в среде VC++.

   
Рассмотрим структуру базового класса, из которого могут создаваться классы-потомки. Объявление класса
представлено ниже.

class <имя>
{
  private:  //Имя секции. Данные и методы, помещенные в эту секцию, 
            //будут поступны только методам этого класса. Доступ к ним 
            //методам производных классов запрещен
    <Приватные (частные) данные> 
    <Приватные (частные) конструкторы> 
    <Приватные (частные) методы>
  protected: //Имя секции. Данные и методы, помещенные в эту секцию,
             //будут доступны методам этого класса и производным от него, 
             //т. е. его потомкам
    <Защищенные данные>
    <Защищенные конструкторы>
    <Защищенные методы>
  public:   //Имя секции. Данные и методы, помещенные в эту секцию, 
            //будут доступны методам всех классов
    <Общедоступные данные> 
    <Общедоступные конструкторы> 
    <Общедоступный деструктор> 
    <Общедоступные методы>
};  //обратите внимание, что так же заканчивается 
    //и объявление структуры

   
Глядя на то, как объявляется класс, вспомним пример из 61 шага, где речь шла о том,
что для структур в языке C++ можно задавать секции private, public, protected. Эти же секции можно
задавать и для классов. Как и для структур, в этих секциях можно определять функции (в классах - это методы), а
вызывать методы на выполнение можно только в соответствии с тем, в какой секции находится функция. Атрибуты
private, public, protected называются атрибутами доступа к членам класса. В классах методы
вызываются так же, как если бы они находились в структуре:

  имя (экземпляра).f(фактические параметры функции);

   
А все эти сходства оттого, что в C++ структуры рассматриваются тоже как классы.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий