Компонентные функции параметризованных классов. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Компонентные функции параметризованных классов.



Реализация компонентной функции шаблона класса, которая находится вне определения шаблона класса, должна включать дополнительно следующие два элемента:

 

Определение должно начинаться с ключевого слова template, за которым следует такой же список_параметров_типов в угловых скобках, какой указан в определении шаблона класса.

За именем_класса, предшествующим операции области видимости (::), должен следовать список_имен_параметров шаблона.

template<список_типов>тип_возвр_значения имя_класса<список_

имен_ параметров>:: имя_функции(список_параметров){... }

Порядок выполнения работы.

1. Создать шаблон заданного класса. Определить конструкторы, деструктор, перегруженную операцию присваивания (“=”) и операции, заданные в варианте задания.

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

3. Выполнить тестирование.

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

5. Написать программу тестирования, в которой проверяется использование шаблона для пользовательского типа.

6. Выполнить тестирование.

Методические указания.

1. Класс АТД реализовать как динамический массив. Для этого определение класса должно иметь следующие поля:

- указатель на начало массива;

- максимальный размер массива;

- текущий размер массива.

2. Для вода и вывода определить в классе функции input и print.

3. Чтобы у вас не возникало проблем, аккуратно работайте с константными объектами. Например:

конструктор копирования следует определить так:

MyTmp (const MyTmp& ob);

операцию присваивания перегрузить так:

MyTmp& operator = (const MyTmp& ob);

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

5. Для шаблонов массивов в качестве стандартных типов использо-

 

вать целые и вещественные типы. Для пользовательского типа взять класс “комплексное число” complex.

class complex{

int re;         // действительная часть

int im;       // мнимая часть

public;

// необходимые функции и перегруженные операции

};

6. Реализацию шаблона следует разместить вместе с определением в заголовочном файле.

7. Программа создается как EasyWin-приложение в Borland C++5.02.

8. Тестирование должно быть выполнено для всех типов данных и для всех операций.

Содержание отчета.

1. Титульный лист: название дисциплины, номер и наименование работы, фамилия, имя, отчество студента, дата выполнения.

2. Постановка задачи.

Следует дать конкретную постановку, т.е указать шаблон какого класса должен быть создан, какие должны быть в нем конструкторы, компоненты-функции, перегруженные операции и т.д.

То же самое следует указать для пользовательского класса.

3. Определение шаблона класса с комментариями.

4. Определение пользовательского класса с комментариями.

5. Реализация конструкторов, деструктора, операции присваивания и операций, которые заданы в варианте задания.

6. То же самое для пользовательского класса.

7. Результаты тестирования. Следует указать для каких типов и какие операции проверены и какие выявлены ошибки (или не выявлены)

Вопросы для самоконтроля.

1. В чем смысл использования шаблонов?

2. Каковы синтаксис/семантика шаблонов функций?

3. Каковы синтаксис/семантика шаблонов классов?

4. Напишите параметризованную функцию сортировки массива методом обмена.

5. Определите шаблон класса “вектор” - одномерный массив. 

6. Что такое параметры шаблона функции?

7. Перечислите основные свойства параметров шаблона функции.

8. Как записывать параметр шаблона?

9. Можно ли перегружать параметризованные функции?

 

10. Перечислите основные свойства параметризованных классов.

11. Может ли быть пустым список параметров шаблона? Объясните.

12. Как вызвать параметризованную функцию без параметров?

13. Все ли компонентные функции параметризованного класса являются параметризованными?

14. Являются ли дружественные функции, описанные в параметризованном классе, параметризованными?

15. Могут ли шаблоны классов содержать виртуальные компонентные функции?

16. Как определяются компонентные функции параметризованных классов вне определения шаблона класса?

 

Варианты заданий.

1.Класс - одномерный массив. Дополнительно перегрузить следующие операции:

* - умножение массивов;

[] - доступ по индексу.

 

2. Класс - одномерный массив. Дополнительно перегрузить следующие операции:

int() - размер массива;

[] - доступ по индексу.

 

3. Класс - одномерный массив. Дополнительно перегрузить следующие операции:

[] - доступ по индексу;

= = - проверка на равенство;

!= - проверка на неравенство.

 

4. Класс - множество set. Дополнительно перегрузить следующие операции:

+ - добавить элемент в множество (типа set+item);

+ - объединение множеств;

* - пересечение множеств;

 

5. Класс - множество set. Дополнительно перегрузить следующие операции:

+ - добавить элемент в множество (типа item + set);

+ - объединение множеств;

= = - проверка множеств на равенство.

 

6. Класс - множество set. Дополнительно перегрузить следующие операции:

- - удалить элемент из множества (типа  set-item);

* - пересечение множеств;

< - сравнение множеств.

 

7. Класс - множество set. Дополнительно перегрузить следующие операции:

- - удалить элемент из множества (типа  set-item);

> - проверка на подмножество;

!= - проверка множеств на неравенство.

 

8.Класс - множество set. Дополнительно перегрузить следующие операции:

+ - добавить элемент в множество (типа set+item);

* - пересечение множеств;

int()- мощность множества.

 

9. Класс - множество set. Дополнительно перегрузить следующие операции:

() - конструктор множества (в стиле конструктора для множественного типа в языке Pascal);

+ - объединение множеств;

<= - сравнение множеств.

 

10. Класс - множество set. Дополнительно перегрузить следующие операции:

> - проверка на принадлежность (типа операции in множественного типа в языке Pascal);

* - пересечение множеств;

< - проверка на подмножество.

 

11. Класс - однонаправленный список list. Дополнительно перегрузить следующие операции:

+ - добавить элемент в начало (list+item);

-- - удалить элемент из начала (--list);

= = - проверка на равенство.

 

12. Класс - однонаправленный список list. Дополнительно перегрузить следующие операции:

+ - добавить элемент в начало (item+list);

-- - удалить элемент из начала (--list);

!= - проверка на неравенство.

 

13. Класс - однонаправленный список list. Дополнительно перегрузить следующие операции:

+ - добавить элемент в конец (list+item);

-- - удалить элемент из конца (типа list--);

!= - проверка на неравенство.

 

14. Класс - однонаправленный список list. Дополнительно перегрузить следующие операции:

[] - доступ к элементу в заданной позиции, например:

Type c;

int i;

list L;

c=L[i];

+ - объединить два списка;

= = - проверка на равенство.

 

15. Класс - однонаправленный список list. Дополнительно перегрузить следующие операции:

[] - доступ к элементу в заданной позиции, например:

int i; Type c;

list L;

c=L[i];

+ - объединить два списка;

!= - проверка на неравенство.

 

16. Класс - однонаправленный список list. Дополнительно перегрузить следующие операции:

() - удалить элемент в заданной позиции, например:

int i;

list L;

L(i);

() - добавить элемент в заданную позицию, например:

int i;

Type c;

list L;

L(с,i);

!= - проверка на неравенство.

 

17. Класс - стек stack. Дополнительно перегрузить следующие операции:

+ - добавить элемент в стек;

-- - извлечь элемент из стека;

bool() - проверка, пустой ли стек.

 

18. Класс - очередь queue. Дополнительно перегрузить следующие операции:

+ - добавить элемент;

-- - извлечь элемент;

bool() - проверка, пустая ли очередь.

 

19. Класс - одномерный массив. Дополнительно перегрузить следующие операции:

+ - сложение массивов;

[] - доступ по индексу;

+ - сложить элемент с массивом.

 

20. Класс - одномерный массив. Дополнительно перегрузить следующие операции:

- - вычитание массивов;

[] - доступ по индексу;

- - вычесть из массива элемент.

Потоковые классы

Цель.

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

5.2 Основное содержание работы.

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



Поделиться:


Последнее изменение этой страницы: 2021-11-27; просмотров: 140; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.22.248.208 (0.022 с.)