Т2 b; |
|
|
public: |
|
|
cls(T1 A,T2 B): a(A),b(B) {} |
|
|
~cls(){} |
|
|
T1 |
sm1() |
// описание шаблона функции |
{ |
|
// суммирования компонент объекта obj |
|
return (T1)(a+b); |
|
|
} |
|
|
|
T1 |
sm2(T1,T2); |
// объявление шаблона функции |
}; |
|
|
|
template <class T1,class T2> |
|
|
T1 cls<T1,T2>::sm2(T1 aa,T2 bb) // описание шаблона функции |
{ |
|
// суммирования внешних данных |
return (T1)(aa+bb); |
|
|
} |
|
|
|
void main() |
|
|
{ |
|
|
|
cls <int,int> obj1(3,4); |
|
|
cls |
<double,double> obj2(.3,.4); |
|
cout<<"функция суммирования компонент объекта 1 |
= " |
|
<<obj1.sm1()<<endl; |
|
|
cout<<"функция суммирования внешних данных (int,int) |
= " |
|
<<obj1.sm24,6)<<endl; |
|
|
cout<<"вызов глобальной функции суммирования (int,int) = " |
|
<<sm1(4,.6)<<endl; |
|
|
cout<<"функция суммирования компонент объекта 2 |
= " |
<<obj2.sm1()<<endl;
cout<<"функция суммирования внешних данных (double,double)= " <<obj2.sm2(4.2,.1)<<endl;
}
6.7.3 Передача в шаблон класса дополнительных параметров
При создании экземпляра класса из шаблона в него могут быть переданы не только типы, но и переменные и константные выражения:
#include <iostream> using namespace std;
template <class T1,int i=0,class T2> class cls
{ T1 a; T2 b;
public:
cls(T1 A,T2 B):a(A),b(B){} ~cls(){}
T1 sm() //описание шаблона функции суммирования компонент объекта {// i+=3; // error member function 'int thiscall cls<int,2>::sm(void)'
return (Tl)(a+b+i);
i
};
void main()
{ cls <int,1,int> obj1(3,2); // в шаблоне const i инициализируется 1 cls <int,0,int> obj2(3,2,1); // error'cls<int,0>::cls<int,0>':no overloaded
// function takes 3 parameter s
cls <int,int,int> obj13(3,2,1); // error 'els': invalid template argument for 'i', // constant expression expected
cout<<obj1.sm()<<endl;
}
Результатом работы программы будет выведенное на экран число 6.
В этой программе согласно инструкции template <class T1,int i=0,class T2> шаблон класса cls имеет три параметра, два из которых - имена типов (Т1 и Т2), а третий (int i=0) - целочисленная константа. Значение константы i может быть изменено при описании объекта cls <int,1,int> obj1(3,2).
6.7.4 Совместное использование шаблонов и наследования
Шаблонные классы, как и обычные, могут использоваться повторно. Шаблоны и наследование представляют собой механизмы повторного исполь зования кода и могут включать полиморфизм. Шаблоны и наследования связа ны между собой следующим образом:
-шаблон класса может быть порожден обычным классом;
-шаблонный класс может быть производным от шаблонного класса;
-обычный класс может быть производным от шаблона класса.
Ниже приведен пример простой программы, демонстрирующей наследо вание шаблонного класса ореr от шаблонного класса vect:
#include <iostream>
using namespace std; |
|
template <class T> |
|
class vect |
// класс-вектор |
{protected: |
|
T *ms; |
// массив-вектор |
int size; |
// размерность массива-вектора |
public: |
|
vect(int n): size(n) |
// конструктор |
{ |
|
ms=new T[size]; |
|
} |
|
~vect(){delete [] ms;} |
//деструктор |
T &operator[] (const int ind)// доопределение операции []
{if((ind>0) && (ind<size)) return ms[ind]; else return ms[0];
}
};
231
template <class T> |
|
|
|
class oper : public vect<T> |
// класс операций над вектором |
{ |
|
|
|
|
public: |
|
|
|
|
oper(int n): vect<T>(n) {} |
// конструктор |
|
~oper() {} |
|
// деструктор |
|
void print() |
|
// функция вывода содержимого вектора |
{ for(int i=0;i<size;i++) |
|
|
|
cout<<ms[i]<<''; |
|
|
|
cout<<endl; |
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
void main() |
|
|
|
|
{ |
|
|
|
|
oper <int> v_i(4); |
// |
int-вектор |
|
oper <double> v_d(4); |
// double-вектор |
|
v_i[0]=5; |
v_i[l]=3; |
v_i[2]=2; |
v_i[3]=4; |
//инициализация int |
v_d[0]=1.3; v_d[l]=5.1; v_d[2]=.5; v_d[3]=3.5; //инициализация double cout<<"int вектор = ";
v_i.print();
cout<<"double вектор = "; v_d.print();
}
Как следует из примера, реализация производного класса от классашаблона в основном ничем не отличается от обычного наследования.
Сводный список рекомендуемой литературы
К главе 1
1Акулов, О.А. Информатика: базовый курс: учеб. пособие / О.А. Акулов, Н.В. Медведев. - 2- изд. - М.: Омега-Л, 2005. - 552 с.
2Алфимов, М.В. Государственная политика предоставления доступа к науч но-технической информации в условиях инновационного развития общест ва // Библиотековедение. - 2005. - № 4. - С. 23-25.
3Арме, В. Электронные библиотеки (перевод с англ.). - М.: ПИК ВИНИТИ, 2001.-274 с.
4Велихов, А.В. Основы информатики и компьютерной техники: учеб. Посо бие /. - А.В. Велихов. - М.: СОЛОН-Пресс, 2003. - 544 с.
5Информатика: учебник. / Н.В. Макарова [и др.]; под ред. Н.В. Макаровой. - 3-е перераб. изд..- М.: Финансы и статистика, 2007. - 765 с
6История информатики и философия информационной реальности: учебное
пособие для вузов / [Тузов В. В. и др.]; под ред. Р. М. Юсупова, В. П. Котенко. - М.: Акад. Проект, 2007. - 430 с.
7Ковалев, М., Шади А.-С. Создание электронного правительства с учетом международного опыта// Банкаускi веснiк. -2006. - чэрвень. - С. 16 - 25. [Электронный ресурс]. - Режим доступа: http://www.nbrb.bv/bv/narch/ 345/2.pdf. - Дата доступа: 18.12.2007.
8Электронные документы: создание и использование в публичных библиоте ках: справ. / науч. Ред. проф. Р.С. Гиляревский, проф. Г.Ф. Гордукалова. - СПб: Профессия, 2007. - 664 с.
Кглаве 2
9Борисов, Е.С. Основные модели и методы теории искусственных нейронных сетей / Е.С. Борисов [Электронный ресурс]. - Режим доступа: http:// mechanoid.narod.ru/nns/base/index.html. - Дата доступа: 18.12.2007.
10Гмурман, В.Е. Теория вероятностей и математическая статистика: учеб. по собие для вузов / В.Е. Гмурман. 7-е стер. изд. - М.: Высш. шк., 2001. -479 с.
11Головко, В.А. Нейроинтеллект: теория и применение. Книга 1: Организация
|
и обучение |
нейронных сетей с прямыми и обратными связями / |
|
В. А. Головко / - Брест: Брестский политехнический институт, 1999. - 264 с. |
12 |
Зачем нужны аналитические технологии [Электронный ресурс]. - Режим |
|
доступа: http://www.neuroproject.ru/what.php. - Дата доступа: 18.12.2007. |
13 |
Кальченко, Д. Нейронные сети: на пороге будущего / Д. Кальченко [Элек |
|
тронный ресурс]. - Режим доступа: http://alt-future.narod.ru/Ai/neiro.htm. - |
|
Дата доступа: |
18.12.2007. |
14Нейроматематика. Книга 6: учеб. пособие для вузов / В.А. Агеев [и др.]; под общ. ред. А.И. Галушкина. - М.: ИПРЖР, 2002. - 448 с.
15Ступчак, А.Я. Аналитические технологии для прогнозирования и анализа данных // Донецкий национальный технический университет [Электронный ресурс]. - Режим доступа: http://www.uran.donetsk.ua/~masters/2000/fkita/ stupchak/oglavl.htm. - Дата доступа: 18.12.2007.
16 Элементы нейронных сетей [Электронный ресурс]. - Режим доступа: http://www.inmit.ni/department/database/ datamining/ 1 l/2.html. - Дата досту па: 18.12.2007.
К главе 3
17Лавренов, СМ. Excel: Сборник примеров и задач / СМ. Лавренов. - М.: Фи нансы и статистика, 2002. - 336 с.
18Мур, Дж.Х. Экономическое моделирование в Microsoft Excel / Дж.Х. Мур, Л.Р. Уэдерфорд. - М.: Издательский дом "Вильямс", 2004. - 1024 с.
Кглаве 4
19Алексеев, Е.Р. Решение задач вычислительной математики в пакетах MathCAD 12, Matlab 7, Maple 9 / Е.Р. Алексеев, О.В. Чеснокова. - М.: НТПресс, 2006.-496 с.
20 Дьяконов, В.П. Matlab 6/6.1 / 6.5. Simulink 4.5. Основы применения / В.П. Дьяконов. - М.: Солон-пресс, 2004. - 768 с.
21Иглин, СП. Математические расчеты на базе Matlab / СП. Иглин. - СПб.: БХВ-Петербург, 2005. - 634 с.
Кглаве 5
22Дьяконов, В.П. Mathematica 4.1, 4.2, 5.0 в математических и научнотехнических расчетах / В.П. Дьяконов. - М.: Солон-пресс, 2004. - 670 с.
23Прокопеня, А.Н. Решение физических задач с использованием системы Mathematica / А.Н. Прокопеня. - Брест, БГТУ, 2005. - 260 с.
Кглаве 6
24Буч, Г. Объектно-ориентированный анализ и проектирование / Г. Буч. -
СПб.: Издательство «Невский Диалект», 2001. - 558 с.
25Дейтел, X. Как программировать на С++ / X. Дейтел, П. Дейтел. - М.: ЗАО «Издательство БИНОМ», 2001. - 1152 с.
26Демидович, Е.М. Основы алгоритмизации и программирования. Язык Си / Е.М. Демидович. - Минск: Бестпринт, 2001. — 411 с.
27Луцик, Ю.А. Объектно-ориентированное программирование на языке С++ / Ю.А. Луцик, A.M. Ковальчук, И.В. Лукьянова. - Минск: БГУИР, 2003. - 202 с.
28Скляров, В.А. Язык С++ и объектно-ориентированное программирование / Мн.:Выш.шк., 1997.-478 с: ил.
29Страуструп, Б. Язык программирования С++ / Б. Страуструп. - М.: ЗАО «Издательство БИНОМ», 2004. - 1098 с.
Учебное издание
Батин Николай Владимирович, Богданова Ирина Феликсовна, Ковальчук Анна Михайловна и др.
Основы информационных технологий
Учебно-методическое пособие
Редактор, корректор А. А. Сычев
Подписано в печать 23. 07. 2008. Формат 60x84 1/16. Бумага офсетная. Гарнитура Таймс. Печать ризографическая. Усл. печ. 13,82 л. Уч.-изд. 12,44 л. Тираж 150 экз. Заказ 150.
ГУО «Институт подготовки научных кадров Национальной академии наук Беларуси» 220049, г. Минск, ул. Кнорина, 1. ЛИ № 02330 / 0133427
Отпечатано в РУП «Научно-практический центр Национальной академии наук Беларуси по механизации сельского хозяйства» 220049, г. Минск, ул. Кнорина, 1.
ЛЛ № 02330-0150026 от 10.05.2007 г.