ВУЗ:
Составители:
Рубрика:
Объектно-ориентированное программирование на С++
{
if(n == ob.n)
{
QMatrix temp(ob.n);
for(int i = 0; i < n; i++)
for(int j = 0; j < ob.n; j++)
for(int k = 0; k < n; k++)
temp.a[i][j] = temp.a[i][j] +
(a[i][k] * ob.a[k][j]);
return temp;
}
else
throw 1;
}
На основе этого шаблона можно создавать объекты сгенерированных
классов QMatrix с указанием конкретных типов данных для элементов
матрицы (int, double, Complex – комплексное число, Fraction –
дробь и т.д.). При генерации класса с указанием пользовательских типов
данных нужно убедиться, что данный пользовательский тип содержит
переопределение основных функций и операций, которые используются в
методах шаблона. Например, пусть разработан класс «Рациональная
дробь» Fraction и создается матрица, элементами которой являются
рациональные дроби:
QMatrix<Fraction> ob(4);
При таком создании объекта происходит генерация класса QMatrix
с элементами типа Fraction (также будут сгенерированы все методы
этого класса). Затем будет вызван сгенерированный конструктор с одним
параметром. При выполнении данного конструктора (его определение
было указано выше) происходит инициализация элементов матрицы
нулями. Для инициализации дроби необходимо, чтобы в классе
Fraction был определен конструктор с одним параметром целого типа,
который преобразует целое число (в данном случае 0) в дробь.
Для корректной работы метода сложения двух матриц придется
определить в классе Fraction операторы присваивания и сложения
двух дробей.
Особое внимание следует обратить на использование дружественных
функций в шаблонах классов. Часто с помощью дружественных функций
переопределяются операции ввода/вывода для конкретного класса. При
117
Объектно-ориентированное программирование на С++
{
if(n == ob.n)
{
QMatrix temp(ob.n);
for(int i = 0; i < n; i++)
for(int j = 0; j < ob.n; j++)
for(int k = 0; k < n; k++)
temp.a[i][j] = temp.a[i][j] +
(a[i][k] * ob.a[k][j]);
return temp;
}
else
throw 1;
}
На основе этого шаблона можно создавать объекты сгенерированных
классов QMatrix с указанием конкретных типов данных для элементов
матрицы (int, double, Complex – комплексное число, Fraction –
дробь и т.д.). При генерации класса с указанием пользовательских типов
данных нужно убедиться, что данный пользовательский тип содержит
переопределение основных функций и операций, которые используются в
методах шаблона. Например, пусть разработан класс «Рациональная
дробь» Fraction и создается матрица, элементами которой являются
рациональные дроби:
QMatrix ob(4);
При таком создании объекта происходит генерация класса QMatrix
с элементами типа Fraction (также будут сгенерированы все методы
этого класса). Затем будет вызван сгенерированный конструктор с одним
параметром. При выполнении данного конструктора (его определение
было указано выше) происходит инициализация элементов матрицы
нулями. Для инициализации дроби необходимо, чтобы в классе
Fraction был определен конструктор с одним параметром целого типа,
который преобразует целое число (в данном случае 0) в дробь.
Для корректной работы метода сложения двух матриц придется
определить в классе Fraction операторы присваивания и сложения
двух дробей.
Особое внимание следует обратить на использование дружественных
функций в шаблонах классов. Часто с помощью дружественных функций
переопределяются операции ввода/вывода для конкретного класса. При
117
Страницы
- « первая
- ‹ предыдущая
- …
- 115
- 116
- 117
- 118
- 119
- …
- следующая ›
- последняя »
