Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(это программирование 2й семестр).docx
Скачиваний:
39
Добавлен:
15.05.2015
Размер:
45.99 Кб
Скачать
  1. Шаблоны функций.

    1. Если алгоритм не зависит от типа данных, лучше реализовать его не в виде группы перегруженных ф-й, а в виде шаблона функции.

В этом случае компилятор сам сгенерирует текст ф-ии для конкретных типов данных, с которыми выполняется вызов и программисту не придется поддерживать несколько практически одинаковых ф-й

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

    1. Как определяется шаблон функций:

template <class Type> тип имя ([список параметров])

{

тело функции

}

Type задает параметризованный тип может использоваться и в основной части заголовка и в теле функции. Параметризованный тип-фиктивное имя, которое компилятор автоматически заменит имени реального типа данных при создании конкретной версии функции.

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

Процесс создания конкретной версии функции наз-ся инстанцированием шаблона или созданием экземпляра функции.

Возможны 2 способа инстанцирования: явный и неявный

Явный - когда объявляется заголовок функции, в котором все параметризованные типы заменены на конкретные типы, известные в этот момент в программе.

Неявный - когда создание экземпляра функции происходит автоматически, если встречается фактический вызов функции

Шаблоны тоже можно перегружать, причем как шаблонами , так и обычными функциями.

  1. Понятие структуры. Объявление и инициализация структур.

    1. Структура(запись) – объединение одного или нескольких объектов(переменных, массивов, указателей, структур). В отличие от массива в записи могут присутствовать элементы разных типов.

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

    1. Объявление структуры

имя структуры

{данные;};

    1. Структуру можно инициализировать в самой программе

Создавая объект структуры, компилятор выделяет память под все типы данных, которые указаны в объявлении.

Размер памяти: float t; int x; int z; равносилен struct tree{float t; int x; int z}D;

struct tree {int a;};

int main()

{tree D;}

Либо сразу после объявления

struct tree{int a;}D;

Можно даже инициализировать массив из структур

tree D[20]; выделяет память для 20 объектов структуры tree.

  1. Ввод вывод элементов структур.

    1. Обращение к элементам структуры осуществляется через точку.

struct tree

{int a; char b;};

tree D;

D.a=5;

D.b=’e’;

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

struct tree

{int a; char b[50];}

tree D;

gets(D.b);

cin>>D.a;

puts(D.b);

cout<<D.a;

  1. Вложенные структуры.

    1. В С++ разрешено использовать записи в записях. Чтобы обратиться к элементу записи: имя записи.имя поля.

    2. Пример вложенной записи.

#include <iostream>

using namespace std;

struct tree{int a;};

struct earth{struct tree D; int b};

  1. Операции над структурами.

    1. Операции: доступ к члену структуры(через точку) D.a=5;

    2. Сортировка массива структур.

    3. Присвоение элементов структуры.

  2. Обращение к элементам структуры.

    1. Для обращению к элементу структуры используется оператор «.»

    2. Синтаксис обращения: имя элемента записи.имя поля;

tree D; D.a=5;

  1. Сортировка массива структур.

    1. Пример простой сортировки массива структур.

#include<iostream>

using namespace std;

struct tree {int h;}

main()

{

const int n=20;

tree a[n];

for(int i=0; i<n; i++)

cin>>a[i].h;

for (int i = 0; i < n-1 ; i++)

{

int min = i;

for(int j = i + 1; j < n; j++) {

if(a[j].h < a[min].h)

min = j;

}

if(min != i)

{

tree T;

T=a[i];

a[min]=a[i];

a[min]=T;

}

for(int i=0; i<n; i++)

cout<<a[i].h<<” “;

return 0;

}