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

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

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

    Наследование используется не только при разработке классов, но и при проектировании приложения. Например, в 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++ структуры рассматриваются тоже как классы.

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




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