Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






программы по terminate()





20. Шаблоны в языке С++.

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

template <typename T>

class TC{};

//...

TC<int> tci;

TC<SomeClass*> tcSC;

 

 

Листинг 1. Пример программы с шаблонами

 

Рис 1 пример трансляции шаблонов

 

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

 

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

 

Статические поля (члены) класса используются тогда, когда всем экземплярам некоторого класса необходимо иметь некоторые общие данные. Статическими могут быть не только поля, но и методы.

 

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

 

Пример использования статических полей и методов можно найти в конце статьи.

 

Такие хитрые шаблоны…

 

Выше отмечалось, что при подстановке в шаблон класса конкретного типа компилятор генерирует новый класс, но что же будет со статическими полями? – ответ на этот вопрос дает следующий код:

?01

#include <iostream>

 

template class TemplateClass {

static T v;

public:

TemplateClass(T value) {

v = v + value;

std::cout << v << std::endl;

}

T get() {

return v;

}

};

 

template T TemplateClass::v = 0;

 

int main() {

TemplateClass a(3);

TemplateClass b(4.5);

TemplateClass c(7);

 

std::cout << "b.get(): " << a.get() << std::endl;

std::cout << "c.get(): " << b.get() << std::endl;

 

return 0;

}

 

 

Листинг 2 пример использования шаблона класса со статическим полем

 

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







Date: 2015-12-12; view: 347; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию