Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с++ метода3511.doc
Скачиваний:
47
Добавлен:
15.04.2015
Размер:
409.6 Кб
Скачать

Шаблоны функций

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

template <список аргументов>

<Тип возвращаемого значения> <имя функции> ( список параметров функции)

{тело функции}

Функция обмена.

template <class T >

void Exchange (T&x , T &y)

{T temp;

temp=x; x =y; y = temp; }

Вызываются шаблонные функции, как обычные.

Пример вызова:

float x=3.6, y=7.5;

char c=3, b=5;

Exchange(x,y);

Exchange(c,b);

Шаблоны функций можно специализировать, т. е. для типов данных, которые не подходят к шаблону можно определить специальную функцию с тем же именем.

В этом случае при вызове функции компилятор пытается:

1) найти функцию, параметры которой точно соответствуют параметрам в вызове;

2) искать шаблон, из которого можно сгенерировать функцию с указанным параметрами;

3) рассматривать функцию на предмет преобразования типов.

Контрольные вопросы

  1. Что такое объявление функции? Чем определение функции отличается от объявления?

  2. Для чего используется ключевое слово return?

  3. Какими способами возможна передача параметров в функции?

  4. В чем отличие использования встроенных функций?

  5. Что такое перегрузка функций? Для чего она применяется?

  6. Напишите полный синтаксис функции main в С++.

  7. Каким образом в С++ осуществляется передача функции ввв качестве формального параметра в другую функцию?

  8. Для чего применются шаблоны функий?

Варианты заданий

Модифицировать программу вычисления значения функции из лабораторной работы № 4.

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

Алгоритмы вычисления y, a, b реализовать в виде функций. Функции a, b передать в функцию y в качестве формальных параметров.

Реализовать поиск максимального, минимального, среднего арифметического значения y на промежутке x0.. xk с шагом hx. Поиск реализовать в виде функций.

6. Структуры, объединения, битовые поля Структуры

Структура – это объединенное в единое целое множество компонентов. Компоненты структуры могут быть разных типов и все должны иметь различные имена. Структура - аналог записи в Паскале.

struct <имя типа (тэг)>

{ тип поле 1;

……………

тип поле n;} <объявление переменной-структуры>;

//для глобальных переменных

Объявить переменную можно потом, вместе с остальными.

Пример:

struct ShowMan

{ char name[20];

char age;

int hight; };

ShowMan D = {“Децл”,18,150};

ShowMan *PD;

PD = &D;

Обращение к полю структуры: D.name.

При вводе, перед полями, представляющими собой символьные массивы, & не ставится.

(*PD).name равносильно PD->name.

Пример массива записей:

ShowMan cinema[20];

(cinema + i)->name (обращение к i-му элементу массива).

ShowMan *p = new ShowMan; (выделение памяти и преобразование указателя на тип ShowMan).

ShowMan *p = new ShowMan(“Денис Ричи”,100,100);

………………….

Delete p;

Объединение

Объединение – это тип данных, позволяющий экономить память, т.к. делает возможным хранение разнотипных данных в одной области памяти (в разное время).

Основное свойство объединения состоит в том, что все его элементы размещаются от начала одного и того же участка памяти.

Пример:

#include<stdio.h>

union Ud

{ char a[10]; // Размер участка памяти, отводимого для объединения,

float b; // определяется размером самого большого из элементов

double z; };

REGS – используется для обращения к переменным, проецируемым на регистры процессора.

REGS a;

a.x – обращение ко всему регистру;

a.h – обращение к старшему байту;

a.l – обращение к младшему байту.

Недостатком объединений является плохая переносимость из-за обращения к памяти.