Здравствуйте.Помогите решить задачу минимум 4 чисел.Условие такое:"Напишите функцию int min (int a, int b, int c, int d) (C/C++)"находящую наименьшее из четырех данных чисел."Заранее спасибо! |
Наследование. Шаблоны классов
Использование шаблонов классов
Чтобы создать при помощи шаблона конкретный объект конкретного класса, при описании объекта после имени шаблона в угловых скобках перечисляются его фактические параметры:
имя_шаблона <фактические параметры> имя_объекта (параметры_конструктора);
Процесс создания конкретного класса из шаблона путем подстановки аргументов называется инстанцированием шаблона.Имя шаблона вместе с фактическими параметрами можно воспринимать как уточненное имя класса. Примеры создания объектов по шаблонам:
List <int> List_int; // список целых чисел List <double> List_double; // список вещественных чисел List <monster> List_monster; // список объектов класса monster Block <char, 128> buf; // блок символов Block <monstr, 100> stado; // блок объектов класса monster Pair<int, int> a; // объявление пары целых Pair<int, double> b; // объявление пары "целый, вещественный" Pair<int, double> b = { 1, 2.1 }; // объявление с инициализацией Pair<string, Date> d; // аргументы - пользовательские классы
При использовании параметров шаблона по умолчанию список аргументов может оказаться пустым, при этом угловые скобки опускать нельзя:
template<class T = char> class String; String<>* p;
Для каждого инстанцированного класса компилятор создает имя, отличающееся и от имени шаблона, и от имен других инстанцированных классов. Тем самым каждый инстанцированный класс определяет отдельный тип. В классе-шаблоне разрешено объявлять статические методы и статические поля, однако следует учесть, что каждый инстанцированный класс обладает собственной копией статических элементов.
После создания объектов с ними можно работать так же, как с объектами обычных классов, например:
for (int i = 1; i<10; i++)List_double.add(i*0.08); List_double.print(); //---------------------------------- for (int i = 1; i<10; i++)List_monster.add(i); List_monster.print(); //---------------------------------- strcpy(buf, "Очень важное сообщение"); cout << buf << endl;
Для упрощения использования шаблонов классов можно применить переименование типов с помощью typedef:
typedef List <double> Ldbl; Ldbl List_double;
Достоинства и недостатки шаблонов
Шаблоны представляют собой мощное и эффективное средство обращения с различными типами данных, которое можно назвать параметрическим полиморфизмом, обеспечивают безопасное использование типов, в отличие от макросов препроцессора, и являются вкупе с шаблонами функций средством реализации идей обобщенного программирования и метапрограммирования. Однако следует иметь в виду, что эти средства предназначены для грамотного использования и требуют знания многих тонкостей. Программа, использующая шаблоны, содержит код для каждого порожденного типа, что может увеличить размер исполняемого файла. Кроме того, с одними типами данных шаблоны могут работать не так эффективно, как с другими. В этом случае имеет смысл использовать специализацию шаблона (о специализации шаблонов можно прочитать в учебнике [18]).
Стандартная библиотека С++ предоставляет большой набор шаблонов для различных способов организации хранения и обработки данных.
На этом данный курс лекций завершается. В него не вошли многие темы, рассмотренные в учебнике [18] и практикуме [19]: шаблоны функций, основы структурной и объектно-ориентированной технологии разработки программ, организация динамических структур данных, обработка исключительных ситуаций, преобразование типов, введение в паттерны проектирования, описание стандартной библиотеки (потоковые классы, строки, контейнеры, итераторы, функциональные объекты, алгоритмы и другие средства). Это связано с формулировкой договора, заключенного автором с издательством ПИТЕР при публикации книги.