Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование программ и программирование на С++ Часть 1. Структурное.pdf
Скачиваний:
18
Добавлен:
15.11.2022
Размер:
3.8 Mб
Скачать

{

/*в функцию root передается указатель на функ­

цию, координаты отрезка и точность*/

float res=root(testf,0,2,0.0001);

cout<<"\nX="<<res;

17.13. Ссылки на функцию

Подобно указателю на функцию определяется и ссылка на функцию:

тип_функции(&имя_ссылки)(параметры)

инициализирующее_выражение;

int f (float a, int b) {...} //определение функции

int (&fref)(float,int)=f; //определение ссылки

Использование имени функции без параметров и скобок будет восприниматься как адрес функции. Ссылка на функцию является синонимом имени функции. Изменить значение ссылки на функцию нельзя, поэтому более широко используются указатели на функции, а не ссылки.

#include dost ream. h> void f(char c)

{

cout«"\n"<<c;

void main()

{

(*pf)(char);

//указатель

на функцию

void

void

(&rf)(char);

//ссылка

на

функцию

f ('A' ); //вызов по имени

на

функцию

pf=f;

//указатель

ставится

(*pf)( 'В'); //вызов с помощью указателя rf('C'); //вызов по ссылке

}

18.ТИПЫ ДАННЫХ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ

18.1.Переименование типов

Типу можно задавать имя с помощью ключевого слова typedef:

typedef тип имя_типа [размерность];

typedef unsigned int UNIT;

typedef char Msg[100];

Такое имя можно затем использовать так же, как и стандартное

имя типа

UNIT а,Ь,с;//переменные типа unsigned int

Msg str[10];// массив из 10 строк по 100 символов

18.2. Перечисления

Если надо определить несколько именованных констант таким образом, чтобы все они имели разные значения, можно воспользо­ ваться перечисляемым типом:

enum [имя_типа] {список констант};

Константы должны быть целочисленными и могут инициализи­ роваться обычным образом. Если инициализатор отсутствует, то пер­ вая константа обнуляется, а остальным присваивается значение на единицу большее, чем предыдущее.

Enum Err{ErrRead, ErrWrite, ErrConvert);

Err error;

switch(error)

{

case ErrRead:

case ErrWrite:

case ErrConvert:

}

18.3. Структуры

Структура - это объединенное в единое целое множество поиме­ нованных элементов данных. Элементы структуры (поля) могут быть различного типа, они все должны иметь различные имена.

Форматы определения структурного типа следующие:

s t r u c t

им я_типа

//с п о с о б 1

 

{

 

 

 

 

 

тип1

э л е м ен т 1;

 

 

тип2

эл ем ен т2 ;

 

 

•};

 

 

 

 

 

s t r u c t

D ate

/ /о п р е д е л ен и е

структуры

{

 

 

 

 

 

i n t

d ay ;

 

 

i n t

m onth;

 

 

i n t

y e a r ;

 

 

};

 

 

 

//п е р е м е н н а я

типа D ate

D ate

b i r t h d a y ;

s t r u c t

 

//с п о с о б 2

 

{

 

 

 

 

 

тип1

эл ем ен т1 ;

 

 

тип2

эл ем ен т2 ;

 

 

}

сп и сок и ден ти ф и като р о в;

 

s t r u c t

 

 

 

{

 

 

 

 

 

i n t

m in;

 

 

i n t

s e c ;

 

 

i n t

m sec;

 

 

}

tim e _ b e g , tim e _ e n d ;

 

В первом случае описание структур определяет новый тип, имя

которого можно использовать наряду со стандартными типами.

Во втором случае описание структуры служит определением переменных.

Структурный тип можно также задать с помощью ключевого

слова ty p e d e f :

 

 

ty p e d e f

s t r u c t

//с п о с о б

3

{

 

 

 

 

f l o a r

r e ;

 

 

f l o a t

im ;

 

 

} C om plex;

 

 

Complex

a [1 0 0 ];//м асс и в и з 100

комплексных чисел.

18.3.1. Работа со структурами

Инициализация структур. Для инициализации структур значе­ ния ее полей перечисляют в фигурных скобках.

//п р и м е р 1

s t r u c t S tu d e n t

{

 

c h a r

n am e[2 0 ] ;

i n t

k u r s ;

f l o a t r a t i n g ;

S tu d e n t s = { " И в а н о в " ,1 ,3 . 5 } ;

//п р и м е р 2 s t r u c t

{

c h a r n am e[2 0 ] ; c h a r t i t l e [3 0 ] ; f l o a t r a t e ;

} em p lo y e e = { "П е т р о в ", "п р о гр ам м и ст", 10000} ;

Присваивание структур. Для переменных одного и того же структурного типа определена операция присваивания. При этом происходит поэлементное копирование.

S tu d e n t t = s ;

Доступ к элементам структур. Доступ к элементам структур обеспечивается с помощью уточненных имен:

и м я _ с т р у к т у р ы . и м я _ эл ем ен та

em p lo y ee . name - указатель на строку «Петров»;

e m p lo y e e . r a t e - переменная целого типа со значением 10000

# in c lu d e < io s tr e a m .h > v o id m a in ()

{

s t r u c t S tu d e n t

{

c h a r n am e[30] ; c h a r g r o u p [1 0 ] ; f l o a t r a t i n g ; };

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]