#include class Vector { public: float x[4]; }; class Matrix { public: virtual Vector operator*(Vector &); }; class DenseMatrix : public Matrix { public: float A[4][4]; virtual Vector operator*(Vector &v) { Vector z; int i, j; for (i = 0; i < 4; i=i+1) z.x[i] = 0; for (i = 0; i < 4; i=i+1) for (j = 0; j < 4; j=j+1) z.x[i] = z.x[i] + A[i][j]*v.x[j]; return z; } }; class SparseMatrix : public Matrix { public: float A[5]; int row[5]; int col[5]; virtual Vector operator*(Vector &v) { Vector z; int i, j; for (i = 0; i < 4; i=i+1) z.x[i] = 0; for (i = 0; i < 4; i=i+1) for (j = 0; j < 4; j=j+1) z.x[i] = z.x[i] + A[i][j]*v.x[j]; return z; } }; int main(int argc, char *argv[]) { DenseMatrix M; Matrix *X; Vector v1, v2; int i, j; for (i = 0; i < 4; i = i + 1) for (j = 0; j < 4; j = j + 1) M.A[i][j] = i + j; for (i = 0; i < 4; i = i + 1) v1.x[i] = i + 100; X = &M; v2 = (*X) * v1; cout << "Matrix M:" << endl; for (i = 0; i < 4; i = i + 1) { for (j = 0; j < 4; j = j + 1) cout << M.A[i][j] << "\t"; cout << "\n"; } cout << "\n"; cout << "Vector v1:" << endl; for (i = 0; i < 4; i = i + 1) cout << v1.x[i] << "\t"; cout << "\n\n"; cout << "Vector v2:" << endl; for (i = 0; i < 4; i = i + 1) cout << v2.x[i] << "\t"; cout << "\n\n"; }