Теоретические сведения для студентов специальностей «Экономика и организация производства», страница 11

Список объектов может быть и пустым, как в данном случае. Тогда описание класса представляет собой шаблон, который можно будет использовать в будущем для создания конкретных экземпляров класса - объектов.

Основное отличие между классами в С++ и структурами в Си заключается в методе инкапсуляции, ограничивающем права доступа к элементам класса. В С++ доступ к элементам структуры класса (class) может определяться описанием отдельных элементов (данных или функций) с атрибутом доступа public, private или protected, в то время как элементы структуры языка С доступны для любого выражения или функции в их области действия.

Обычно ограничения на уровень доступа в С++ касаются элементов данных: данные имеют атрибут private или protected, а методы - public.

Смысл атрибутов доступа следующий:

private - член класса с атрибутом private может использоваться только методами собственного класса и функциями-"друзьями" этого же класса; по умолчанию все члены класса, объявленного с ключевым словом clаss, имеют атрибут доступа private;

protected - то же что и private, но дополнительно член класса может использоваться методами и функциями - «друзьями" производного класса, для которого данный класс является базовым;

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

Явно ограничения на доступ могут переопределяться записью атрибута доступа перед компонентами класса.

В С++ элементы класса типа структуры (struct) и объединения (union), в отличие от типа class (по умолчанию - private), по умолчанию принимаются как public. Для ключевого слова struct атрибут можно явно переопределять на private или protected. Для ключевого слова union явное переопределение атрибута доступа невозможно.

ПРИМЕРЫ ОБЪЯВЛЕНИЯ КЛАССОВ

1) для ключевого слова class:

class X {int i;        // i - переменная целого типа в контексте класса Х имеет

//атрибут доступа private по умолчанию

          public:

          int j;                       //j и k имеют явно заданный

float k;                             //атрибутдоступа public

          protected: int l; сhar m;};

здесь l и m имеют явно заданный атрибут доступа protected,

int – объявление переменной целого типа;

float - объявление вещественной переменной (значение представлено числом с плавающей точкой);

char - объявление символьной переменной.

2) для ключевого слова struct:

struct Y {     int i;// переменная целого типа i имеет атрибут доступа, по

//умолчанию, public

          private:        int j;             // j и k имеют явно заданный

float k;                             // атрибутдоступа private

          protected:

int l;                      // l и m имеют явно заданный

          сhar m; };              //атрибут доступа protected

3) для ключевого слова union:

union Z { int i; };    //i имеет, по умолчанию, атрибут доступа

         // public и не может быть переопределено

Из приведенных примеров видно, что в С++ можно использовать две наклонные черты для введения однострочного комментария. Допускается использование пары символов (/* */), но их лучше применять для многострочных комментариев.

Помимо данных класс включает и функции-члены класса (методы). Методы класса связываются с конкретным классом специальным оператором :: (два рядом расположенных двоеточия). Знак :: называется областью действия оператора (контекст). Он говорит компилятору о том, что данная версия функции принадлежит заданному классу.

Пример:

Х::f1(int x); - функция f1 принадлежит классу Х;       (говорят, функция f1 задана в контексте класса Х)

Так, пример моделирования физической точки (пикселя) на экране, рассмотренный выше, мог бы быть записан следующим образом:

class Point { int X,Y,C;

public:void show (void); } p1; // void - пустое значение, используемое в

//качестве типа возвращаемого значения и в качестве списка передаваемых

//параметров

          void Point::show(void){putpixel(X,Y,C); }