Программирование >>  Программирование на языке c++ 

1 ... 21 22 23 [ 24 ] 25 26 27 ... 159


3. ОБЪЕКТЫ И КЛАССЫ В ЯЗЫКЕ С++

3.1. Основные понятия

Основная идея введения классов заключается в том, чтобы предоставить программисту средства для создания новых типов данных, которые могут использоваться так же, как и встроенные типы (например, int или float). Класс - это абстракция. Фактически это тип, определяемый пользователем. Рассмотрим пример. Зададим структуру с именем point в языке С, которая содержит координаты (х,у) точки на экране дисплея:

struct point {int х,у;};

Пусть нам нужны две функции, которые позволяют нарисовать точку (set pixel) и прочитать ее координаты (get pixel):

void set pixel (int.int);

void get pixel(int*,int*);

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

struct point {

int х.у;

void set pixel (int.int); void get pixel (int*,int*);

Данные (x и у), объявленные в приведенной структуре, называются компонентами-данными, а функции, объявленные в приведенной структуре, - компонентами-функциями. Теперь



МЫ можем обратиться к данным и вызвать функции, только указав имя объекта, к которому они принадлежат. Для этих целей можно использовать те же операции . и ->, которые были определены в языке С. Рассмотрим пример: int a,b;

point my point,*pointer to point; pointer to point = &my point ; my point.set pixel(50,100); pointer to point -> get pixel(&a,&b);

После выполнения рассмотренных действий а = 50 и b = 100 (см. рис. 3.1).

Поскольку различные структуры могут иметь компоненты-функции с одинаковыми именами, при описании компонента-функции необходимо указывать, для какой структуры он описывается. Для нашего примера это будет выглядеть так (рис. 3.2):

void point :: set pixel (int x set, int y set)

команды языка С-Н- для этой функции

Объявление структуры (класса) point (ее нет в памяти, это только информация для компилятора)

ту ро1п1.зе1 р1Хс1(50,1(Ю)

struct point { int х,у;

void set pixel(int,int); void get pixel(int*,int*); }; -

Размещение

©

point my point, *pointer to point;

структуры в памяти (имя объекта my point)

Выделение

памяти под указатель на структуру

pointer to point

pointer to point &my point

int a,b;

05ft \ 100 pointcr to point -> get pixcl(&a,&b);

Рис. 3.1. Объявление и использование классов



Любые обращения к компонентам этой же структуры в теле функции (это тело выше заключено в скобки { }) не требуют указания имени объекта, например:

void point :: set pixel(int x set, int y set) {

x = x set; у = y set;

вычерчивание точки на экране дисплея

В языке С++ структура - это тоже класс, поэтому в программе можно использовать все рассмотренные выше конструкции. С другой стороны, мы можем записать вместо ключевого слова struct ключевое слово class, например:

class point {

public: все компоненты класса по умолчанию являются локальными (имеют атрибут private) int х,у;

void set pixel(int, int); void get pixel(int*, int*);

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

Возвращаемое Имя класса, функцией / которому set pixcl / принадлежит значение j \ функция f

Оператор принадлежности

Тсяо функции

I void I

/ W

point

1 S6t pixel(int x set, int y set)l{.....}\

Имя I I Типы I фунищи параметров функции

Имена I параметров функции

Рис. 3.2. Описание компонента-функции класса



1 ... 21 22 23 [ 24 ] 25 26 27 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика