Язык С++ для системного программирования. Имена-этикетки. Класс как область действия, страница 5

В структуре по умолчанию элементы имеют доступ public,а в классе-private .

Объединение по умолчанию дает доступ public.

Аналогично объединениюв С его элементы данных размещаются,начиная с одного и того же места в пам΄яти.

17.6 Элементы класса

Делятся на две категории:

  • данные, которые называются элементами-данными (data members) ;
  • элементы-функции (member functions) или методы.

Элементы-данные похожи на элементы структуры языка С с некоторыми дополнениями:

1.  Элементы данных не могут определяться как auto , extern , register .

2.  Элементами данных могут быть перечисляемые типы, битовые поля или представители ранее представленного класса.

3.  Элементом данных не может быть представитель именно этого класса.

4.  Элементом данных класса может быть указатель или ссылка на представителя этого класса.

17.7 Элементы-функции

Элемент-функция описывается при определении класса. Само определение функции может также быть приведено внутри определения класса.В этом случае функция является встроенной (inline) функцией-элементом.

Если определение функции приводится вне границ определения класса, то перед ее именемставится префикс из имени класса и операции разрешения видимости(::).

Пример.

class car

{

private:

char marka[10];

char color[15];

float cost;

public:

void get _ info();

void put _ info()

{

printf ("Марка автомобиля % s \ n ", marka );

printf("Его цвет %s\n",color);

printf("Цена -%f\n",cost);

}

};

void car::getinfo()

{

puts(" Введите марку автомобиля ");

fflush(stdin);

scanf("%s",&marka);

puts ("Введите его цвет");

fflush ( stdin );

scanf ("% s ",&color );

puts ("Сколько он стоит?");

scanf ("% f ",&cost );

}

В этом примере определение элемента-функции put _ info () находится внутри определения класса car, то есть она является inline -функцией. А определениефункции get _ info () приведено вне границ определения класса.

17.8 Доступ к элементам данных

Функции-элементы могут обращаться к другому элементу класса,используя просто его имя.Обычные функции или функции-элементы другого класса могут получить доступ к элементам данных с помощью операций точка (.) или ->. Они применяются соответственно к представителю или к указателю на представителя класса.

Пример

class coord

{

public:

int x,y;

};

voidmain ()

{

coordarg ;//Создается локальный объе кт

coord *p = &arg ;//Указатель на объе кт

arg.x=10;//Имя объекта.элемент

p -> y =5;//Вместо

arg.y =5;

}

17.9 Вызов функций-элементов

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

Пример

class coord

{

private:

int x,y;

public:

void get_info(int _x,int _y)

{

x=_x;

y=_y;

}

void putinfo(int &xx,int &yy)

{

xx=x;

yy=y;

}

};

void main()

{

coord arg;

coord*p=&arg;

arg.get _ info(10,5);//Имя объекта . функция-элемент

intcol , row ;

p -> putinfo ( col , row );//Указатель -> функция-элемент

}

18.1 Класс как область действия

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