|
Программирование >> Программирование на языке c++
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. Описание компонента-функции класса
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |