Добавил:
Помощь с лабораторными, контрольными практическими и курсовыми работами по: - Инженерной и компьютерной графике - Прикладной механике Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 сем 1 курс С++ / Экзамен / Lektsii_Kurakina_2_semestr.pdf
Скачиваний:
12
Добавлен:
08.08.2022
Размер:
4.82 Mб
Скачать

cout<<”максимум =”<<max(l,i);}

В С++ нет механизма изменения типа возвращаемого значения. Для того чтобы функции возвращали результат без потери значения, при вызове функции, переменную или константу старшего типа необходимо использовать в качестве 1го аргумента.

Обращение типа max(i,l), max(i,d) даст неверный результат. Возвращаемое значение не поместится в переменную типа int.

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

У шаблонов функций есть несколько недостатков:

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

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

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

7.10 Шаблоны классов

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

Пример: class vector не зависит от типа данных, производится инициализация получения элемента по индексу.

#include <iostream>

#include<string.h>

using namespace std;

template <class T>

class vector

{ T *data;

int size;

public:

vector(int);

~vector() {delete[] data;} T& operator[](int i) {return data[i];}};

template <class T> vector <T> :: vector(int n)

{data=new T[n]; size=n;}

int main()

{vector <int> x(10); for (int i=0;i<10;++i)

{x[i]=i*i;

cout<<x[i];} vector <char> c(5);

for (char ic=0; ic<5; ++ic) {c[ic]=ic+'a'; cout<<c[ic];}

}

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

class vector<char *>{…};

Для вектора строк класс по шаблону генерироваться не будет.

Соседние файлы в папке Экзамен