практику

advertisement
15. Перегрузка операций. Введение
15.1. Примеры решения задач
15.1.1. Пример решения простой задачи
Задача:
Разработать класс комплексное число и реализовать операцию сложения комплексных
чисел.
Решение:
//Complex.h
#ifndef __COMPLEX__
#define __COMPLEX__
//класс комплексное число
class Complex {
int i, r;
public:
//конструктор класса
Complex(int _r, int _i):i(_i), r(_r) {}
//перегруженная операция сложения комплексных чисел
Complex operator+(Complex &b);
//метод отображения комплексного числа
void show();
};
#endif
//Complex.cpp
#include "Complex.h"
#include <iostream>
using namespace std;
//реализация перегруженной операции сложения комплексных чисел
Complex Complex::operator+(Complex &b)
{
//новый объект комклексное число
//создается посредствам инициализирующего конструктора
return Complex(r + b.r, i + b.i);
}
//реализация метода отображения комплексного числа
void Complex::show()
{
cout << " " << r << " + i * " << i << "\n";
}
//main.cpp
#include "Complex.h"
int main()
{
//пример создания двух объектов комплексного типа
Complex c1(1, 2), c2 (2,1);
c1.show();
c2.show();
//пример использования прегруженной операции сложения
(c1 + c2).show();
return 0;
}
15.1.2. Пример решения задачи средней сложности
Задача:
Разработайте класс вектор из 10 элементов и реализуйте операцию доступа по индексу.
Решение:
//Vector.h
#ifndef __VECTOR__
#define __VECTOR__
#define N 10
//класс вектор
class Vector{
int arr[N];
public:
//конструктор класса
Vector();
//пример перегрузки операции доступа по индексу
//обратите внимание, возвращается ссылка, следовательно,
//операцию можно использовать слева
int & operator[](int i);
//метод отображения вектора
void show();
};
#endif
//Vector.cpp
#include "Vector.h"
#include <iostream>
using namespace std;
//реализация конструктора класса
Vector::Vector()
{
for(int i = 0; i < N; i++)
arr[i] = 0;
}
//реализация операции доступа по индексу
int & Vector::operator[](int i)
{
return arr[i];
}
//реализация метода отображения вектора
void Vector::show()
{
for(int i = 0; i < N; i++)
cout << arr[i] <<" ";
cout << "\n";
}
//main.cpp
#include "Vector.h"
int main()
{
//пример создания объекта типа вектор
Vector v;
v.show();
//пример использования операции доступа по индексу
v[2] = 10;
v.show();
return 0;
}
15.1.3. Пример решения задачи повышенной сложности
Задача:
Необходимо разработать класс матрица. Размер матриц фиксирован 3x3. При реализации
класса матрицу необходимо реализовать как массив векторов. В приведенных классах
разработать операции позволяющие инициализировать элементы матрицы посредствам
двойной индексации (A[1][3] = 10).
Решение:
//Vector.h
#ifndef __VECTOR__
#define __VECTOR__
#define N 10
//класс вектор
class Vector{
int arr[N];
public:
//конструктор класса
Vector();
//пример перегрузки операции доступа по индексу
//обратите внимание, возвращается ссылка, следовательно,
//операцию можно использовать слева
int & operator[](int i);
//метод отображения вектора
void show();
};
#endif
//Vector.cpp
#include "Vector.h"
#include <iostream>
using namespace std;
//реализация конструктора класса
Vector::Vector()
{
for(int i = 0; i < N; i++)
arr[i] = 0;
}
//реализация операции доступа по индексу
int & Vector::operator[](int i)
{
return arr[i];
}
//реализация метода отображения вектора
void Vector::show()
{
for(int i = 0; i < N; i++)
cout << arr[i] <<" ";
cout << "\n";
}
//Matrix.h
#ifndef __MATRIX__
#define __MATRIX__
#include "Vector.h"
//класс матрицы
class Matrix {
Vector arr[N];
public:
//перегрузка операции доступа по индексу
Vector & operator[](int i);
//метод отображения матрицы
void show();
};
#endif
//Matrix.cpp
#include "Matrix.h"
#include <iostream>
using namespace std;
//перегрузка операции доступа по индексу
Vector & Matrix::operator[](int i)
{
return arr[i];
}
//метод отображения матрицы
void Matrix::show(){
for(int i = 0; i < N; i++)
arr[i].show();
cout << "\n";
}
//main.cpp
#include "Matrix.h"
int main()
{
//пример создание объекта типа матрицы
Matrix m;
m.show();
//пример использования перегруженных операций доступа по индексу
// m[1][2] = 10; <=> m.operator [](1).operator [](2) = 10;
m[1][2] = 10;
m.show();
return 0;
}
15.2. Задачи для самостоятельного решения
В ниже приведенных задачах необходимо разработать описание класса (или классов) в
виде заголовочного файла, а также реализовать указанную операцию.
15.2.1. Простые задачи
1. Разработать класс комплексное число и реализовать операцию сложения
комплексного числа и вещественного числа типа double.
2. Разработать класс рациональное число и реализовать операцию вычитания
комплексного числа и вещественного числа типа double.
3. Разработать класс комплексное число и реализовать операцию сложения
вещественного числа типа double и комплексного числа.
4. Разработать класс рациональное число и реализовать операцию вычитания
вещественного числа типа double и комплексного числа.
5. Разработать класс комплексное число и реализовать операцию сложения
комплексного числа и вещественного числа типа double. Для перегрузки
используйте дружественную функцию.
6. Разработать класс рациональное число и реализовать операцию вычитания
комплексного числа и вещественного числа типа double. Для перегрузки
используйте дружественную функцию.
7. Разработать класс комплексное число. Для инициализации мнимой части числа
перегрузите операцию «/» с комплексным числом слева.
8. Разработать класс комплексное число. Для инициализации реальной части числа
перегрузите операцию «/» с комплексным числом справа.
9. Разработать класс комплексное число. Реализуйте операцию умножения
комплексных чисел.
10. Разработать класс комплексное число. Для извлечения значения мнимой части
перегрузите операцию «!».
15.2.2. Задачи средней сложности
1. Разработайте класс вектор из 10 элементов и реализуйте операцию сложения.
2. Разработайте класс вектор из 10 элементов и реализуйте операцию вычитания.
3. Разработайте класс вектор из 10 элементов и реализуйте операцию скалярного
произведения.
4. Разработайте класс вектор из 10 элементов и реализуйте операцию
инициализации элемента по индексу.
5. Разработайте класс матрица размерности 3x3 и реализуйте операцию сложения.
Матрицу хранить как непрерывный массив.
6. Разработайте класс матрица размерности 3x3 и реализуйте операцию вычитания.
Матрицу хранить как непрерывный массив.
7. Разработайте класс матрица размерности 3x3 и реализуйте операцию умножения.
Матрицу хранить как непрерывный массив.
8. Разработайте класс прямоугольник. В приведенном классе реализуйте операцию
«!» позволяющую вычислить площадь прямоугольника.
9. Разработайте класс прямоугольник. В приведенном классе реализуйте операцию
«+» позволяющую вычислить площадь фигуры полученной в результате
объединения прямоугольников.
10. Разработайте класс прямоугольник. В приведенном классе реализуйте операцию
«&» позволяющую вычислить площадь фигуры полученной в результате
пересечения прямоугольников.
15.2.3. Задачи повышенной сложности
1. Необходимо разработать класс хранения битовых множеств максимум из 10
элементов. В разработанном классе реализуйте операцию «[]» для получения
ответа – существует ли -ый элемент в множестве.
2. Необходимо разработать класс хранения битовых множеств максимум из 10
элементов. В разработанном классе реализуйте операцию «+» – объединение
множеств.
3. Необходимо разработать класс хранения битовых множеств максимум из 10
элементов. В разработанном классе реализуйте операцию «&» – пересечение
множеств.
4. Необходимо разработать класс хранения битовых множеств максимум из 10
элементов. В разработанном классе реализуйте операцию «!» – отрицание
множества.
5. Необходимо разработать класс матрица. Размер матриц фиксирован 3x3. При
реализации класса матрицу необходимо реализовать как массив векторов. В
приведенных классах разработать операции позволяющие инициализировать
элементы матрицы посредствам двойной индексации (A[1][3] = 10).
6. Необходимо разработать класс матрица. Размер матриц фиксирован 3x3. При
реализации класса матрицу необходимо реализовать как массив векторов.
Разработайте набор операций «+» позволяющий складывать матрицы.
7. Необходимо разработать класс матрица. Размер матриц фиксирован 3x3. При
реализации класса матрицу необходимо реализовать как массив векторов.
Разработайте набор операций «-» позволяющий вычитать матрицы.
8. Необходимо разработать класс матрица. Размер матриц фиксирован 3x3. При
реализации класса матрицу необходимо реализовать как массив векторов.
Разработайте реализацию операции «*» позволяющей умножать матрицы.
9. Необходимо разработать класс матрица. Размер матриц фиксирован 3x3. При
реализации класса матрицу необходимо реализовать как массив векторов.
Разработайте реализацию операции «*» позволяющей умножать матрицу на
вектор.
10. Необходимо разработать класс матрица. Размер матриц фиксирован 3x3. При
реализации класса матрицу необходимо реализовать как массив векторов.
Разработайте реализацию операции «!» позволяющую найти обратную матрицу.
Download