ЛАБОРАТОРНЫЕ РАБОТЫ ПО C++


№2. РАЗРАБОТКА КЛАССОВ.


задания     

вернуться к главе     тесты     предыдущая глава     следующая глава    
Лабораторные работы
Содержание учебника
Авторы

Разработать перечисленные ниже классы. При разработке каждого класса возможны два варианта решения:
а) данные-члены класса представляют собой переменные и массивы фиксированной размерности;
б) память для данных-членов класса выделяется динамически.


1. «Комплексное число» - Complex. Класс должен содержать несколько конструкторов. Реализовать методы для сложения, вычитания, умножения, деления, присваивания для данного класса. В головной программе создать два вектора размерности из комплексных координат. Передать их в функцию, которая выполняет сложение комплексных векторов. В головной программе выдать на экран результат.


2. Определить класс «Дробь» в виде пары . Класс должен содержать несколько конструкторов. Реализовать методы для сложения, вычитания, умножения и деления дробей. Перегрузить операции сложения, вычитания, умножения, деления присваивания для данного класса. Перегрузить операции отношения для данного класса. Создать массив объектов и передать его в функцию, которая изменяет каждый элемент массива с четным индексом путем добавления следующего за ним элемента массива.


3. Разработать класс «Вектор» - Vector размерности . Определить несколько конструкторов, в том числе конструктор копирования. Реализовать методы для вычисления модуля вектора, скалярного произведения, сложения, вычитания, умножения на константу. Перегрузить операции сложения, вычитания, умножения, инкремента, декремента, индексирования, присваивания для данного класса. Написать программу, демонстрирующую работу с классом. Создать массив объектов. Написать функцию, которая для заданной пары векторов будет определять, являются ли они коллинеарными или ортогональными.


4. Определить класс «Квадратная матрица» - Matrix. Класс должен содержать несколько конструкторов, в том числе конструктор копирования. Реализовать методы для сложения, вычитания, умножения, матриц. Реализовать методы для вычисления нормы матрицы. Перегрузить операции сложения, вычитания, умножения и присваивания для данного класса. Создать массив объектов класса Matrix и передать его в функцию, которая изменяет -ю матрицу путем возведения ее в квадрат. В головной программе вывести результат.


5. Разработать класс Polynom степени . Написать несколько конструкторов, в том числе конструктор копирования. Реализовать методы для вычисления значения полинома; сложения, вычитания и умножения полиномов. Перегрузить операции сложения, вычитания, умножения, инкремента, декремента, индексирования, присваивания для данного класса. Написать программу, демонстрирующую работу с этим классом. Создать массив объектов класса. Передать его в функцию, вычисляющую сумму полиномов массива и возвращающую полином-результат, который выводится на экран в головной программе.


6. Определить класс Stack. Элементы стека хранятся в массиве. Если массив имеет фиксированную размерность, то предусмотреть контроль выхода за пределы массива. Если память выделяется динамически и ее не хватает, то увеличить размер выделенной памяти. Включение элементов в стек и их извлечение реализовать как в виде методов, так и с помощью перегруженных операций. Создать массив объектов класса Stack. Передавать объекты в функцию, которая удаляет из стека первый (сверху), третий, пятый и т.д. элементы. В головной программе отобразить полученные объекты.


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


8. Определить класс «Строка» - String длины n. Написать несколько конструкторов, в том числе конструктор копирования. Реализовать методы для выполнения конкатенации строк, извлечения символа из заданной позиции, сравнения строк. Перегрузить операции сложения, индексирования, отношения, добавления , присваивания для данного класса. Написать программу, демонстрирующую работу с классом. Создать массив объектов и передать его в функцию, которая выполняет сортировку строк в лексикографическом порядке.


9. Разработать класс «Множество целых чисел (символов, строк и т.д.)» - Set мощности n. Написать несколько конструкторов, в том числе конструктор копирования. Реализовать методы для определения принадлежности заданного элемента множеству; пересечения, объединения, разности двух множеств. Перегрузить операции сложения, вычитания, умножения (пересечения), индексирования, присваивания для данного класса. Написать программу для тестирования данного класса. Создать массив объектов и передавать пары объектов в функцию, которая строит множество, состоящее из элементов, входящих только в одно из заданных множеств, т.е. , и возвращает его в головную программу.


10.Разработать класс для массива строк. Написать несколько конструкторов, в том числе конструктор копирования. Реализовать методы для поэлементной конкатенации двух массивов, упорядочения строк в лексикографическом порядке, слияния двух массивов с удалением повторяющихся строк, а также для вывода на экран всего массива и заданной строки. Перегрузить операции сложения, умножения, индексирования, присваивания для данного класса. Написать программу для тестирования класса. Создать массив объектов и передавать объекты в функцию, которая выполняет слияние объектов и для полученного объекта-результата выполняет упорядочения строк в лексикографическом порядке.


11.Составить описания класса, обеспечивающего представление матрицы заданного размера и любого минора в ней. Память для матрицы выделать динамически. Написать несколько конструкторов, в том числе конструктор копирования. Реализовать методы для отображения на экране как матрицы в целом, так и заданного минора, а также для изменения минора; сложения, вычитания, умножения миноров. Перегрузить операции сложения, вычитания, умножения и присваивания для данного класса. Написать программу для тестирования класса. Создать массив объектов данного класса и передать его в функцию, которая изменяет для -ой матрицы ее минор путем умножения на константу. В головной программе вывести результат.


12.Построить класс “Булев вектор” – BoolVector размерности . Определить несколько конструкторов, в том числе конструктор копирования. Реализовать методы для выполнения поразрядных конъюнкции, дизъюнкции и отрицания векторов, а также подсчета числа единиц и нулей в векторе. Реализовать те же действия над векторами с помощью перегруженных операций. Перегрузить операции отношения и присваивания для данного класса. Написать программу, демонстрирующую работу с классом. Создать массив объектов. Передавать объекты в функцию, которая будет их изменять по формуле . В головной программе вывести результат.


13.Реализовать класс “Троичный вектор” размерности n. Компоненты вектора принимают значения из множества . Реализовать методы для проверки векторов на ортогональность, для пересечения не ортогональных векторов, сравнения векторов, подсчета числа компонент, равных X. Реализовать те же действия над векторами с помощью перегруженных операций. Перегрузить операцию присваивания для данного класса. Выполнить тестирование класса, предварительно создав массив объектов.


14.Определить класс “Булева матрица” – BoolMatrix размерности . Класс должен содержать несколько конструкторов, в том числе конструктор копирования. Реализовать методы для логического сложения (дизъюнкции), умножения и инверсии матриц. Реализовать методы для подсчета числа единиц в матрице и упорядочения строк в лексикографическом порядке. Перегрузить операции для логического сложения, умножения и инверсии матриц, а также операцию присваивания. Создать массив объектов класса BoolMatrix. Передавать объекты в функцию, которая их изменяет по формуле . В головной программе вывести результат.


Вопросы:

1. С помощью каких методов создаются и удаляются объекты ?

2. Всегда ли вызывается конструктор при создании объекта ?

3. Приведите примеры, когда вызывается деструктор ?

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

5. Укажите полную и сокращенную формы вызова оператор функции.

6. Как определяются и используются статические данные-члены класса ?

7. Как определяются и вызываются статические методы класса ? Какие ограничения на них накладываются ?

Минск 2004

задания     

вернуться к главе     тесты     предыдущая глава     следующая глава