Объектно-ориентированное программирование на C++. Андрианова А.А - 145 стр.

UptoLike

Объектно-ориентированное программирование на С++
метод, перегружающий операцию "+" для сложения матриц. Этот метод
получает в качестве параметра ссылку на объект класса Matrix и
возвращает объект этого же типа:
Matrix Matrix::operator +(Matrix&);
Применение этого метода для сложения двух квадратных матриц
связано с двумя преобразованиями. Во-первых, параметр типа QMatrix
должен передаваться через ссылку на базовый класс. Такая передача
параметров возможна, поскольку ссылка на базовый класс может
указывать на объект производного класса. Проблема возникнет при
возвращении результата. Результатом сложения квадратных матриц
является квадратная матрица. Поэтому естественно желание присвоить
результат работы метода объекту класса QMatrix, т.е. делается попытка
осуществить преобразование из типа базового класса к производному
типу. Для этих целей класс QMatrix должен содержать конструктор с
параметром типа Matrix и оператор присваивания с тем же параметром.
Таким образом, объявление класса «Квадратная матрица» будет
следующим:
class QMatrix : public Matrix
{
public:
// конструктор создания квадратный матрицы
// по ее размеру
QMatrix(int);
// конструктор по умолчанию
QMatrix();
// конструктор для преобразования
// к квадратной матрице
QMatrix(Matrix&);
// оператор присваивания
QMatrix& operator=(Matrix&);
// метод вычисления определителя матрицы
double Determinant();
// метод получения подматрицы для нахождения минора –
// требуется для вычисления определителя
// и обратной матрицы
QMatrix SubMatrix(int, int);
// оператор получения обратной матрицы
QMatrix operator~();
};
145
                           Объектно-ориентированное программирование на С++
метод, перегружающий операцию "+" для сложения матриц. Этот метод
получает в качестве параметра ссылку на объект класса Matrix и
возвращает объект этого же типа:
     Matrix Matrix::operator +(Matrix&);

     Применение этого метода для сложения двух квадратных матриц
связано с двумя преобразованиями. Во-первых, параметр типа QMatrix
должен передаваться через ссылку на базовый класс. Такая передача
параметров возможна, поскольку ссылка на базовый класс может
указывать на объект производного класса. Проблема возникнет при
возвращении результата. Результатом сложения квадратных матриц
является квадратная матрица. Поэтому естественно желание присвоить
результат работы метода объекту класса QMatrix, т.е. делается попытка
осуществить преобразование из типа базового класса к производному
типу. Для этих целей класс QMatrix должен содержать конструктор с
параметром типа Matrix и оператор присваивания с тем же параметром.
     Таким образом, объявление класса «Квадратная матрица» будет
следующим:

     class QMatrix : public Matrix
     {
     public:
          // конструктор создания квадратный матрицы
          // по ее размеру
          QMatrix(int);
          // конструктор по умолчанию
          QMatrix();
          // конструктор для преобразования
          // к квадратной матрице
          QMatrix(Matrix&);
          // оператор присваивания
          QMatrix& operator=(Matrix&);
          // метод вычисления определителя матрицы
          double Determinant();
          // метод получения подматрицы для нахождения минора –
          // требуется для вычисления определителя
          // и обратной матрицы
          QMatrix SubMatrix(int, int);
          // оператор получения обратной матрицы
          QMatrix operator~();
     };



                                                                       145