Пособие по ООП: различия между версиями

Содержимое удалено Содержимое добавлено
Пособие по ООП moved to Объектно-ориентированное программирование
 
Строка 1:
=== Шаблоны классов ===
#REDIRECT [[Объектно-ориентированное программирование]]
 
Шаблоны в Си++ создаются с помощью ключевого слова «<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 &lt;typename T&gt; class Container</tt>», если мы говорим о шаблоне в общем, или же «<tt>Container &lt;int&gt;</tt>», если мы говорим о конкретном экземпляре шаблона.
 
* Безусловно, у шаблонов может быть несколько параметров.
 
* Параметрами шаблонов могут быть не только типы. Например, вы можете описать шаблон «<tt>template &lt;typename T, unsigned size&gt; class Array</tt>», и воспользоваться его экземпляром «<tt>Array &lt;float, 20&gt;</tt>».
 
=== Шаблоны функций ===
 
=== Параметры шаблонов ===
 
==== «<tt>typename</tt>» и «<tt>class</tt>» ====
 
==== Простые типы как параметры шаблона ====
 
==== Значения по-умолчанию у параметров шаблона ====
 
=== Синтаксические особенности шаблонов ===
 
(Типа: до сих пор мы не касались того, а что скрывается за троеточиями в приведённых примерах шаблонов.)
 
==== Определение функций-членов (методов) ====
 
==== Конструктор и деструктор ====
 
==== Определение данных-членов (атрибутов) ====
 
==== Экземпляр шаблона как параметр другого шаблона ====
 
==== Шаблон как параметр другого шаблона ====
 
==== Ключевое слово «<tt>typename</tt>» ====
 
=== Особенности компиляции шаблонов ===
 
==== Помещаем шаблоны в файлы ====
 
==== Проверка ошибок при работе с шаблонами ====