Пример
class SquareMatrix: public Matrix { public:
SquareMatrix(int n) : Matrix(n, n) { setResName("Scalar product");
} cout << "Created square matrix!" << endl;
~SquareMatrix() {
} cout << "Destroyed square matrix!" << endl; };void calc();
Пример
//Получить скалярное произведение
//главной и побочной диагонали void SquareMatrix::calc() {
result = 0;
for (int i=0; i<n; i++)
result += *(data + i*n + i)* *(data + i*n + } n-i-1);
int _tmain(int argc, _TCHAR* argv[]) { MathEntity * entities[3] = {
new Vector(5), new Matrix(3,4), }; new SquareMatrix(5)
Пример
for (int i=0; i<3; i++) {
cout << entities[i]->getResName() << " = " << entities[i]->getRes() << endl;
} delete entities[i];
cin.ignore(); } return 0;
Результаты
Created entity!
Created vector!
Created entity!
Created matrix!
Created entity!
Created matrix!
Created square matrix! Modulus = 13.9284 Destroyed entity! Geometric mean = 4.57455 Destroyed entity!
Scalar product = 4.74292 Destroyed entity!
Виртуальныедеструкторы
Вданномпримере,несмотряна полиморфностьклассов,они удаляютсякакэкземплярыбазового класса.Этонекорректно!
Деструкторвлюбойиерархии,где хотябыводномклассе требуется освободитьресурсы,долженбыть виртуальным!