Шаг 1.
Класс как расширение понятия структуры

    На этом шаге мы введем понятие класса, используя для этого понятие структуры.

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

    Простейшим образом класс можно определить с помощью конструкции:

   ключ_класса имя_класса { список_компонентов };

где ключ_класса - одно из служебных слов class, struct, union; имя_класса - произвольно выбираемый идентификатор; список_компонентов - определения и описания типизированных данных и принадлежащих классу функций.

    В проекте стандарта языка Си++ указано, что компонентами класса могут быть данные, функции, классы, перечисления, битовые поля, дружественные функции, дружественные классы и имена типов. Вначале для простоты будем считать, что компоненты класса - это типизированные данные (базовые и производные) и функции. Заключенный в фигурные скобки список компонентов называют телом класса. Телу класса предшествует заголовок. В простейшем случае заголовок класса включает ключ класса и его имя. Определение класса всегда заканчивается точкой с запятой.

    Принадлежащие классу функции мы будем называть методами класса или компонентными функциями. Данные класса - компонентными данными или элементами данных класса.

    В качестве ключа_класса можно использовать служебное слово struct, но класс отличается от обычного структурного типа, по крайней мере, возможностью включения компонентных функций. Например, следующая конструкция простейшим образом вводит класс "комплексное число":

    struct complex1    // Вариант класса "комплексное число".
    {   double  real;  // Вещественная часть.
        double  imag;  // Мнимая часть.
        // Определить  значение  комплексного  числа:
        void define  (double re = 0.0, double im = 0.0)
            { real = re;  imag = im; }
        // Вывести на экран значение комплексного числа:
        void display(void)
        { cout << "real = " << real; cout << ", imag = " << imag;}
    };

    В отличие от структурного типа в класс (тип) complex1, кроме компонентных данных (real, imag), включены две компонентные функции define() и display().

    Обратим еще раз внимание на тот факт, что класс (как и его частный случай - структура), введенный пользователем, обладает правами типа. Следовательно, можно определять и описывать объекты класса и создавать производные типы:

    complex1 X1, Х2, D;     // Три объекта класса complex1.
    complex1 *point = &D;   // Указатель на объект класса complex1.
    complex1 dim[8];        // Массив  объектов  класса  complex1.
    complex1 &Name  = X2;   // Ссылка на  объект  класса complex1.
и т.д.


    Замечание. Класс "комплексное число" очень полезен в прикладных программах, и поэтому в компиляторах языка Си++ он включен в стандартные библиотеки. Библиотечный класс complex становится доступным при включении в программу заголовочного файла complex.h.

    Итак, класс - это тип, введенный программистом. Каждый тип служит для определения объектов. Для описания объекта класса используется конструкция:

    имя_класса имя_объекта;

    В определяемые объекты класса входят данные (элементы), соответствующие компонентным данным класса. Компонентные функции класса позволяют обрабатывать данные конкретных объектов класса. Но в отличие от компонентных данных компонентные функции не тиражируются при создании конкретных объектов класса. Если перейти на уровень реализации, то место в памяти выделяется именно для элементов каждого объекта класса. Определение объекта класса предусматривает выделение участка памяти и деление этого участка на фрагменты, соответствующие отдельным элементам объекта, каждый из которых отображает отдельный компонент данных класса. Таким образом, и в объект X1, и в объект dim[3] класса complex1 входит по два элемента типа double, представляющих вещественные и мнимые части комплексных чисел.

    На следующем шаге мы начнем рассматривать способы доступа к компонентам класса.




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