Шаблоны функций и классов

Понятия шаблонов функции и класса, правила описания на языке С++. Разработка и отлаживание в среде программирования программ, содержащих шаблоны функций и классов. Шаблон функции square, возвращающей квадрат переменной. Создание шаблона класса массива.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 25.05.2013

ФИНАНСОВЫЙ УНИВЕРСИТ ПРИ ПРАВИТЕЛЬСТВЕ РФ

Кафедра прикладной информатики в экономике

ЛАБОРАТОРНАЯ РАБОТА

по дисциплине: "Информатика и программирование" на тему:

Шаблоны функций и классов

Студент Г.Р. Автанделян

Преподаватель Л.К. Кузнецов

МОСКВА

2013

Цель работы

Цель работы: изучить представление и правила работы с шаблонами в С++.

Ознакомиться:

Ш с понятием шаблона функции;

Ш с понятием шаблона класса;

Ш с правилами описания шаблонов на языке С++.

Изучить приемы создания и использования шаблонов классов.

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

Получить практические навыки создания шаблонов и использования их в программах С++.

Задание 1

1.1 Задание

Реализовать шаблон функции square, возвращающей квадрат переменной. Для проверки работоспособности шаблона функции написать тестирующую программу, в которой функция вызывается для данных целого, вещественного и длинного целого типа.

1.2 Листинг программы

#include <iostream>

using namespace std;

template <class T>

T square(T x)

{return x * x;}

int main()

{

int i1;

double d1;

long int l1;

cout<<"Введите целое число i1 ";

cin>>i1;

cout<<"Квадрат целого числа i1 = "<<square(i1) << endl;

cout<<"\Введите вещественное число d1 ";

cin>>d1;

cout<<"\Квадрат вещественного числа d1 = "<<square(d1)<< endl;

cout<<"Введите длинное целое число l1 ";

cin>>l1;

cout<<"\Квадрат длинного целого числа l1 = "<<square(l1)<< endl;

system ("pause");

return 0;

}

1.3 Тестирование программы

1.4 Шаблон функции для поиска минимального элемента массива

Листинг программы

#include <iostream.h>

#include <stdlib.h>

#include <stdlib.h>

#include <time.h>

#include<conio.h>

template <class T>

T min(T *a, const int size)

{

T m = a[0];

for (int i = 1; i < size; ++i)

if (a[i] < m)

m = a[i];

return m;

}

int main()

{

srand(time(NULL)); //Инициализация датчика

int i,na,nb,mina,*a;

// na количество элементов в целочисленном массиве a

// nb количество элементов в вещественном массиве b

// mina минимальный элемент массива a

//*a указатель одномерного целочисленного массива a

float minb, *b;

//minb минимальный элемент массива b

//*b указатель одномерного вещественного массива b

// формирование исходных массивов

cout << "Введите количество элементов массива a: "; cin >> na;

a=new int[na];//динамическое выделение памяти для массива a

cout <<"Сформированные " <<na <<" элемента (ов) массива a: "<< endl;

for (i=0;i<na;i++)

{

//формирование СЧ в диапазоне от -100 до 100

a[i]=rand()%201-100; //формирование СЧ в диапазоне от -100 до 100

cout << a[i]<<" ";

}

cout << "\nВведите количество элементов массива b: "; cin >> nb;

b=new float[nb];//динамическое выделение памяти для массива b

cout <<"Сформированные " <<nb <<" элемента (ов) массива b: "<< endl;

for (i=0;i<nb;i++)

{

//формирование СЧ в диапазоне от -100.0 до 100.0

b[i]=201.0*rand()/RAND_MAX-100.0;

cout << b[i]<<" ";

}

mina= min(a,na);

cout <<"\nМинимальный элемент массива a: " <<mina << endl;

minb= min(b,nb);

cout <<"\Минимальный элемент массива b: " <<minb << endl;

system("pause");

delete []a; // освобождение динамической памяти

delete []b;// освобождение динамической памяти

return 0;

}

1.5 Тестирование программы

Задание 2

2.1 Задание

Создайте шаблон класса массива, в котором есть методы для вычисления суммы и среднего значения хранимых в массиве чисел.

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

Данные для массивов сформировать с помощью датчика случайных чисел.

2.2 Листинг программы

шаблон функция класс

#include <iostream.h>

#include <stdlib.h>

#include <stdlib.h>

#include <time.h>

#include<conio.h>

template<class T, class T1>

class array

{

public:

array(int size);

T1 sum(void);

T average_value(void);

void show_array(void);

int add_value(T);

private:

T *data;

int size;

int index;

};

template<class T, class T1>

array<T, T1>::array(int size)

{

data = new T[size];

if (data == NULL)

{

cerr << "Недостаточно памяти - программа завершается" << endl;

exit(1);

}

array::size = size;

array::index = 0;

}

template<class T, class T1>

T1 array<T, T1>::sum(void)

{

T1 sum = 0;

for (int i = 0; i < index; i++) sum += data[i];

return(sum);

}

template<class T, class T1>

T array<T, T1>::average_value(void)

{

T1 sum =0;

for (int i = 0; i < index; i++) sum += data[i];

return (sum /index);

}

template<class T, class T1>

void array<T, T1>::show_array(void)

{

for (int i = 0; i < index; i++)

cout << data[i] << " ";

cout << endl;

}

template<class T, class T1>

int array<T, T1>::add_value(T value)

{

if (index == size)

return(-1); // Массив полон

else

{

data[index] = value;

index++;

return(0); // Успешно

}

}

int main()

{

srand(time(NULL)); //Инициализация датчика

// Массив из 100 элементов

array<int, long> numbers(100);

// Массив из 200 элементов

array<float, float> values(200);

int i,m;

float a;

//Целочисленный массив

cout << "Целочисленный массив 50 элементов" << endl;

for (i = 0; i < 50; i++)

{m=rand()%201-100; //формирование СЧ в диапазоне от -100 до 100

numbers.add_value(m);

}

numbers.show_array();

cout << "Сумма чисел равна " << numbers.sum () << endl;

cout << "Среднее значение равно " << numbers.average_value() << endl;

//Вещественный массив

cout << "Вещественный массив 100 элементов" << endl;

for (i = 0; i < 100; i++)

{a=201.0*rand()/RAND_MAX-100.0; //формирование СЧ в диапазоне от -100.0 до 100.0

values.add_value(a);

}

values.show_array();

cout << "Сумма чисел равна " << values.sum() << endl;

cout << "Среднее значение равно " << values.average_value() << endl;

system("pause");

return 0;

}

2.3 Тестирование программы

Выводы

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

Во время выполнения этой и других работ Вы познакомитесь с другими возможностями языка С++ и выберете для себя некоторый стиль написания программ на языке С++.

Чем активнее Вы будете овладевать возможностями системы программирования на языке С++, тем более легким и эффективным будет для Вас выполнение всего лабораторного практикума.

Размещено на stud.wiki




Подобные документы

  • Создание класса wind, характеризующего ветровой режим, и программы, демонстрирующей применение разработанного класса. Программный модуль на языке программирования C++ в среде программирования C++Builder6/0, демонстрирующая работу с классом wind.

    курсовая работа [123,5 K], добавлен 24.06.2010

  • Разработка шаблонной функции FindMax, выполняющей поиск максимального элемента в массиве. Разработка шаблонного класса CMyArray, представляющего собой массив элементов некоторого типа. Иерархия классов и интерфейсов. Индексированный доступ к элементам.

    лабораторная работа [419,0 K], добавлен 03.11.2014

  • Основные понятия препроцессорной обработки. Объектно-ориентированные средства С++. Объектные типы данных. Виртуальные функции. Шаблоны функций и классов. Классы для ввода-вывода потоков. Задачи по программированию на Си, по разработке систем объектов.

    курс лекций [53,8 K], добавлен 03.10.2008

  • Механизм классов в C++. Инициализация внутреннего объекта с помощью конструктора. Управление доступом к классу. Защищенные члены класса. Графические средства компилятора Borland C 3.1. Библиотека стандартных шаблонов. Реализация и использование класса.

    курсовая работа [2,7 M], добавлен 16.05.2012

  • Построение абстрактной модели. Структура базового класса System_Term: формальное описание класса, структура данных и функций, инструкция программиста и пользователя. Структура базовых классов mobile, Home, TV, Internet, их составные части и функционал.

    курсовая работа [1,2 M], добавлен 20.06.2014

  • Приемы работы с инструментальной средой программирования С++. Кодирование арифметических и логических выражений с использованием стандартных библиотечных функций ввода, вывода в С++. Описание переменной вещественного типа в языке программирования С++.

    лабораторная работа [137,9 K], добавлен 13.06.2014

  • Оценка функциональных возможностей стандартных классов представления данных на примерах использования избранных методов ("detect: ifNone:" класса Set, "to:by:do:" класса Number и "copy: ReplaceFrom: to: with:" класса OrderedCollection), их тестирование.

    лабораторная работа [1,1 M], добавлен 14.10.2012

  • Основные приемы работы с классами и объектами. Перегрузка функций и операторов. Массивы объектов. Реализация одиночного наследования. Множественное наследование. Виртуальные функции. Шаблоны: понятие и функциональные особенности, свойства и применение.

    методичка [1,1 M], добавлен 16.04.2012

  • Виртуальные функции, статические и абстрактные классы, шаблоны: элементы и члены класса, их роль в объектно-ориентированном программировании; механизм осуществления виртуального вызова при выполнении программы; обработка исключительных ситуаций в C++.

    реферат [27,2 K], добавлен 06.12.2010

  • Класс как специальная структура для хранения разнотипной информации о физическом объекте. Порядок объявления класса, его специальные элементы-функции. Создание указателя на объект. Особенности конструкторов и деструкторов. Собственные операции класса.

    курсовая работа [483,1 K], добавлен 07.04.2014