Инициализация структур
. . .
. . .
Структуры
Перечисления
Переименование типов
Типы данных, определяемые пользователем
Ссылки на функцию
Подобно указателю на функцию определяется и ссылка на функцию:
тип_функции(&имя_ссылки)(параметры)
инициализирующее_выражение;
Пример 91.
int f(float a,int b){. . . } /*определение функции*/
int(&fref)(float,int)=f; //определение ссылки
Использование имени функции без параметров и скобок будет восприниматься как адрес функции. Ссылка на функцию является синонимом имени функции. Изменить значение ссылки на функцию нельзя, поэтому более широко используются указатели на функции, а не ссылки.
Пример 92.
#include <iostream.h>
void f(char c)
{cout<<”\n”<<c;}
void main()
{
void (*pf)(char); //указатель на функцию
void(&rf)(char); //ссылка на функцию
f(‘A’); //вызов по имени
pf=f; //указатель ставится на функцию
(*pf)(‘B’); //вызов с помощью указателя
rf(‘C’); //вызов по ссылке
}
Типу можно задавать имя с помощью ключевого слова typedef:
typedef тип имя_типа [размерность];
Пример 93
typedef unsigned int UNIT;
typedef char Msg[100];
Такое имя можно затем использовать также как и стандартное имя типа:
UNIT a,b,c; //переменные типа unsigned int
Msg str[12]; /* массив из 10 строк по 100 символов*/
Если надо определить несколько именованных констант таким образом, чтобы все они имели разные значения, можно воспользоваться перечисляемым типом:
enum [имя_типа] {список констант};
Константы должны быть целочисленными и могут инициализироваться обычным образом. Если инициализатор отсутствует, то первая константа обнуляется, а остальным присваиваются значение на единицу большее, чем предыдущее.
Пример 94
enum Err{ErrRead, ErrWrite, ErrConvert);
Err error;
. . . .
switch(error)
{
case ErrRead: …..
case ErrWrite: …..
case ErrConvert: …..
}
Структура – это объединенное в единое целое множество поименованных элементов данных. Элементы структуры (поля) могут быть различного типа, они все должны иметь различные имена.
Форматы определения структурного типа следующие:
1. struct имя_типа//способ 1
{
тип 1 элемент1;
тип2 элемент2;
};
Пример 95
struct Date //определение структуры
{
int day;
int month;
int year;
};
Date birthday; //переменная типа Date
2. struct//способ 2
{
тип 1 элемент1;
тип2 элемент2;
} список идентификаторов;
Пример 96
struct
{
int min;
int sec;
int msec;
}time_beg,time_end;
В первом случае описание структур определяет новый тип, имя которого можно использовать наряду со стандартными типами.
Во втором случае описание структуры служит определением переменных.
3.Структурный тип можно также задать с помощью ключевого слова typedef:
Пример 97. способ 3
Typedef struct
{
floar re;
float im;
}Complex;
Complex a[100]; /*массив из 100 комплексных чисел.*/
Для инициализации структур значения ее полей перечисляют в фигурных скобках.
Пример 98
1. struct Student
{
char name[20];
int kurs;
float rating;
};
Student s={”Иванов”,1,3.5};
2. struct
{
char name[20];
char title[30];
float rate;
}
employee={“Петров», “директор”,10000};