Указатель funcptr на функцию, которая имеет параметр типа char и возвращает значение типа int. При использовании имент функции без последующих скобок и параметров имя функции выступает в качестве указателя на эту функцию, и его значением служит адрес размещения функции в памяти.
Вызов функции с помощью указателя на функцию
(*имя_указателя) ( список_фактических_параметров);
# include < iost ream.h>
int add (int n, int m) {return n + m;}
int subt (int n,int m ) {return n – m;}
int mult (int n, int m) {return n * m;}
int result (int a,int b, char c)
{
int (*p)(int, int);
switch ( c )
{
case '+' : p = add; break;
case '–' : p = subt; break;
case '*' : p = mult; break;
}
return ((*p) (a,b));
}
void main ( )
{
int x,y; char ch;
cout << " \n введите знак "; cin >> ch;
while (ch!=' ')
{
cout << "\n введите числа"; cin >> x >> y;
cout << result (x,y,ch);
cout << " \n введите знак "; cin >> ch;
}
}
Ссылки
В С++ ссылка определяется как другое имя уже существующего объекта.
тип & имя_ссылки инициализатор;
int L = 77;
int & RL = L;
В качестве инициализирующего выражения должно использоваться имя некоторого объекта, ранее размещенного в памяти. Значением ссылки становится адрес этого объекта. Имя ссылки используется как синоним (алиас) уже существующего объекта. Обратиться к объекту теперь можно двумя способами (по имени и по ссылке, причем выполнять операцию раскрытия ссылки не требуется).
Наиболее широко ссылки используются в качестве параметров функции, если из функции требуется возвратить более, чем одно значение.
Ссылка в данном случае обеспечит те же возможности, что и указатель, но для нее в теле функции не нужно выполнять операции разыменования, а фактическим параметром будет не адрес, а обычная переменная.
// Обмен значений двух переменных с помощью указателей
void swap1 (double * x, double * y)
{
double c = * x; *x = * y; * y = c;
}
// Обмен значений двух переменных с помощью ссылок
void swap2 (double &x, double &y)
{
double c = x; x = y; y = c;
}
void main ()
{
double d = 1.23, l = 4.56;
swap1 (&d, &l); swap2 (d,l);
}
Ссылка может быть параметром, возвращаемым из функции. За счет этого вызов функции можно использовать в левой части оператора присваивания.
/* Функция определяет ссылку на элемент с максимальным значением в массиве, массив с переменным количеством параметров */
int& rmax ( int n, int d [ ])
{
int m = 0;
for (int i=1;i<n;i++) m= d[m]>d[i] ? m : i;
return d [m];
}
void main ( )
{
int n=4;int x[]={10,40,30,20}; cout << rmax (n,x);
rmax(n,x)=110; for (int i=0;i<n;i++) cout << x[i];
}
Возвращение функцией ссылки позволяет организовать многократное вложенное обращение к нескольким функциям.
struct card
{
char * author;
char * title;
…
int pages;
}
// Объявление структурированных объектов
сard rec1, rec2;
Для обращения к атрибутам структуры используются квалифицированные имена
имя_структуры. имя _атрибута;
Структуру можно проинициализовать
card rec1 = { "…", "…",…,550};
Определение структуры может быть совмещено с объявлением объектов, имеющих данный структурированный тип
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.