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

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

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

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

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

где ключ_класса - одно из служебных слов 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, представляющих вещественные и мнимые части комплексных чисел.

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



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

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