Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 39 40 41 [ 42 ] 43 44 45 ... 210


Описания классов

Класс специфицирует тип. Его имя становится typedef-имя, которое может быть использовано даже внутри самого спецификатора класса. Объекты класса состоят из последовательности членов.

Синтаксис:

заголовок класса

{ список членов opt }

заголовок класса

{ список членов opt public :

список членов opt }

Где заголовоккласса:

агрег идентификатор opt

Где идентификатор opt:

public opt typedef-имя

А агрег может иметь вид:

class

struct

union

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

Список членов может также содержать описания, регулирующие видимость имен членов.

Синтаксис:

описание члена список членов opt Описание члена:

спецификаторы описания opt описатель члена;

Описатель члена:

описатель

идентификатор opt : константное выражение

Члены, являющиеся классовыми объектами, должны быть объектами предварительно полностью описанных классов. В



частности, класс cl не может содержать объект класса cl, но он может содержать указатель на объект класса cl. Имена объектов в различных классах не конфликтуют между собой и с обычными переменными.

Вот простой пример описания структуры:

struct tnode

char tword[20];

int count; tnode *left; tnode *right;

содержащей массив из 20 символов, целое и два указателя на такие же структуры.

Если было дано такое описание, то описание

tnode s, *sp

описывает s как структуру данного сорта и sp как указатель на структуру данного сорта.

При наличии этих описаний выражение

sp->count

ссылается на поле count структуры, на которую указывает sp;

s.left

ссылается на указатель левого поддерева структуры s;

s.right->tword[0] сс1ается на первый символ члена tword правого поддерева структуры s.

Статические члены

Член-данные класса может быть static; члены-функции не могут. Члены не могут быть auto, register ии extern. Есть единственная копия статического члена, совместно используемая всеми членами класса в программе. На статический член mem класса cl можно сс1латься cl:mem, то есть без сс1лки на объект. Он существует, даже если не было создано ни одного объекта класса cl.



Функции-члены

Функция, описанная как член, (без спецификатора friend) называется функцией членом и вызывается с помощью синтаксиса члена класса.

Например:

struct tnode

char tword[20]; int count; tnode *left; tnode *right;

void set (char* w,tnode* 1,tnode* r);

tnode n1, n2;

nl.set ( asdf ,&n2,0);

n2.set ( ghjk ,0,0);

Определение функции члена рассматривается как находящееся в области видимости ее класса. Это значит, что она может непосредственно использовать имена ее класса. Если определение функции члена находится вне описания класса, то имя функции члена должно быть уточнено именем класса с помощью записи

typedef-имя . простое оп имя

Например:

void tnode.set (char* w,tnode* l,tnode* r)

count = strlen (w);

if (sizeof (tword) <= count) error ( tnode string too long );

strcpy (tword,w);

left = l;

right = r;

Имя функции tnode.set определяет то, что множество функций является членом класса tnode. Это позволяет использовать имена членов word, count, left и right.

В функции члене имя члена ссылается на объект, для которого б1а вызвана функция. Так, в вызове n1.set(...) tword сс1лается на nl.tword, а в вызове n2.set(...) он сс1лается на



1 ... 39 40 41 [ 42 ] 43 44 45 ... 210

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