Си++: различия между версиями
Содержимое удалено Содержимое добавлено
Ramir (обсуждение | вклад) чуть подправил. Убрал ненужные обращения, воззвание о типографике заменил ссылками на статьи в ВП |
Andreyvit (обсуждение | вклад) |
||
Строка 546:
=== Шаблоны классов ===
Шаблоны в Си++ создаются с помощью ключевого слова «<tt>template</tt>». Предыдущий пример можно переписать в виде:
==== Определение ====▼
template <typename T>
class Container {
public:
void add (T value);
int index_of (T value);
int get_count ();
T get_value (int index);
private:
… … …
};
Мы имеем шаблон, называемый «<tt>Container</tt>». Этим шаблоном, как и любым другим, в чистом виде пользоваться нельзя; пользоваться можно только его экземплярами для конкретных типов.
В Си++ экзамемпляр шаблона «<tt>Container</tt>» для типа «<tt>int</tt>» будет называться «<tt>Container<int></tt>»; угловые скобки и всё между ними следует рассматривать как часть названия класса. (Хотя, безусловно, вы можете вставлять пробелы по вкусу, например «<tt>Container < int ></tt>».)
Си++ сам создаёт нужные экземпляры шаблона, то есть никаких «<tt>DEFINE_CONTAINER</tt>» и тому подобных вещей вы не пишете вообще. Вы просто пользуетесь нужными экземплярами шаблонов. Например, мы можем написать:
Container <int> apples;
void main () {
apples.add (7);
apples.add (11);
}
Что ещё нужно вам узнать прямо сейчас?
* В чистом виде название «<tt>Container</tt>» не используется почти ни в каких случаях. (Исключения упомянем позже.) Всегда используется или «<tt>template <typename T> class Container</tt>», если мы говорим о шаблоне в общем, или же «<tt>Container <int></tt>», если мы говорим о конкретном экземпляре шаблона.
* Безусловно, у шаблонов может быть несколько параметров.
* Параметрами шаблонов могут быть не только типы. Например, вы можете описать шаблон «<tt>template <typename T, unsigned size> class Array</tt>», и воспользоваться его экземпляром «<tt>Array <float, 20></tt>».
=== Шаблоны функций ===
=== Параметры шаблонов ===
==== «<tt>typename</tt>» и «<tt>class</tt>» ====
==== Простые типы как параметры шаблона ====
==== Значения по-умолчанию у параметров шаблона ====
=== Синтаксические особенности шаблонов ===
(Типа: до сих пор мы не касались того, а что скрывается за троеточиями в приведённых примерах шаблонов.)
▲==== Определение функций-членов (методов) ====
==== Конструктор и деструктор ====
==== Определение данных-членов (атрибутов) ====
==== Экземпляр шаблона как параметр другого шаблона ====
==== Шаблон как параметр другого шаблона ====
==== Ключевое слово «<tt>typename</tt>» ====
=== Особенности компиляции шаблонов ===
==== Помещаем шаблоны в файлы ====
==== Проверка ошибок при работе с шаблонами ====
=== Шаблоны функций ===
|