6.1.1. Напишите конструктор для класса rational, который при заданных двух целых — делимом и частном, использует алгоритм нахождения наибольшего общего делителя и сводит внутреннее представление к наименьшим значениям а и q (см. тему «Перегрузка и выбор функции»).
Перегрузите операторы равенства и сравнения для класса rational. Заметьте, что если два рациональных числа представлены в форме, данной в предыдущем упражнении, они равны тогда и только тогда, когда равны их делимые и частные (см. тему «Перегрузка и выбор функции»).
6.1.2. Напишите функцию, которая складывает вектор v с матрицей m. Вот прототип, который надо добавить в классы matrix и vect:
friend vect add(const vect& v, matrix& m);
Вектор v будет поэлементно складываться с каждой строкой матрицы m (см. тему «Дружественные функции»).
6.1.3.Определите класс complex как
class complex { public:
complex(double r) { real = r; imag =0; } void assign(double r, double i)
{ real = r; imag = i; } void print()
{ cout << real « » + » << imag << «i «; } operator double()
{ return (sqrtfreal * real + imag * imag));} private: double real, imag;
} ;
Дополнить этот класс, перегрузив некоторые операторы. Например, функцию-член print() можно заменить, создав дружественную функцию operators():
ostream& operator<<(ostream& out,complex x)
{ out<<x.real<<» + «<<x.imag<<«i «; return out;
}
Напишите и проверьте код для оператора унарного минуса. Он должен возвращать complex, причём значения действительной и мнимой частей меняют знак.
Для типа complex напишите бинарные операторы-функции сложения, умножения и вычитания. Каждая функция должна возвращать значение complex. Запишите их как дружественные функции. Почему не следует использовать функции- члены?
Напишите две дружественные функции:
friend complex operator*(complex,double); friend complex operator+(double,complex);
6.2.1 Определите новый класс matrix_iterator как итерирующий класс, который перебирает по очереди все элементы матрицы (см. тему «Перегрузка оператора () для индексирования»). Используйте его для нахождения наибольшего элемента матрицы.
6.2.2.Переделайте АТД my_string, используя перегрузку операторов (см. тему «Пример: динамически размещаемые строки»). Функция-член assingn должна быть изменена так, чтобы стать operator=. Функция-член concat должна стать operator+. Кроме того, перегрузите оператор [] так, чтобы он возвращал i-ый символ из my_string. Если такого символа нет, должно возвращаться значение -1.
6.2.3.Переделайте АТД списка с помощью перегрузки операторов (см. тему «Пример: односвязный список»). Функция-член prepend() должна быть заменена на operator+(), a del() — на operator—()). Кроме того, перегрузите оператор () так, чтобы он возвращал i-ый элемент списка.
6.2.4.Дополните пакет обработки полиномов функциями polynomial::release() и polynomial::print(). В качестве примера посмотрите как реализована эта функция в классе slist из темы «Пример: односвязный список». Возьмите функцию-член polynomial::plus() из темы
«Многочлен как связный список» и представьте её в виде кода для перегрузки operator+: polynomial operator+(const polynomial&,const polynomial&)
Эта функция должна быть дружественной классу polynomial.
Прикрепленные файлы: |
|
|---|---|
|
Администрация сайта не рекомендует использовать бесплатные работы для сдачи преподавателю. Эти работы могут не пройти проверку на уникальность. Узнайте стоимость уникальной работы, заполните форму ниже: Узнать стоимость |
|
Скачать файлы: |
|
|
|
