#include <iostream>
#include <cmath>
#define MAX_SIZE 10
using namespace std;
 
class matrix {
      public:
             int col, fil; 
             double s[MAX_SIZE][MAX_SIZE];
             matrix (int n, int m);
             matrix (){};
             matrix(const matrix& A);
             matrix operator = (matrix A);
             matrix operator + (matrix A);
             matrix scan_matrix (void);
             void print_matrix (void);
             ~matrix(){}
      };
      
matrix :: matrix(int n, int m){
       if(n>MAX_SIZE){
                      cerr<<"ERROR: el numero de filas introducidas es mayor del permitido";
                      fil=MAX_SIZE;
                      }
       else{
            fil=n;
            }
       if(m>MAX_SIZE){
                      cerr<<"ERROR: el numero de columnas introducidas es mayor del permitido";
                      col=MAX_SIZE;
                      }
       else{
             col=m;
            }
}
 
matrix :: matrix (const matrix& A){
       fil=A.fil;col=A.col;
       for(int i=0;i<A.fil;i++){
               for(int j=0;j<A.col;j++){
                       s[i][j]=A.s[i][j];
                       }
               }
} 
 
matrix matrix :: operator + (matrix A){
       if(col!=A.col || fil != A.fil){
                     cerr<<"ERROR: el numero de filas o columnas de las matrices introducidas no coinciden";
                     }
       matrix C(A.fil,A.col);
       for(int i=0;i<A.fil;i++){
               for (int j=0;j<A.col;j++){
                   C.s[i][j]=s[i][j]+A.s[i][j];
               }
       }
       return C;
}
 
matrix matrix ::operator = (matrix A){
       fil = A.fil; col = A.col;
       for(int i=0;i<A.fil;i++){
                for (int j=1;j<A.col;j++){
                s[i][j]=A.s[i][j];
                }
       }
}
 
matrix matrix :: scan_matrix (void){
       for (int i=0;i<fil;i++){
           for(int j=0;j<col;j++){
                   cout<<"Introduzca el coef "<<i<<" "<<j<<"n";
                   cin>>s[i][j];
                   }
           }
}
 
void matrix :: print_matrix (void){
     for (int i=0;i<fil;i++){
         for(int j=0;j<col;j++){
                 cout<<"El coef "<<i<<" "<<j<<" = "<<s[i][j]<<"n";
                 }
         }
}
 
class square_matrix : public matrix {
      public:
             square_matrix(int size) : matrix (size,size) {}
             ~square_matrix () {}
};
 
class vector : public matrix {
      public:
             vector (int size) : matrix(1,size) {}
             vector(const matrix& A);
             ~vector () {}
};
 
vector :: vector (const matrix& A){
       col=A.col;
       for(int i=0;i<A.fil;i++){
                       s[1][i]=A.s[1][i];
                       }
} 
 
int main (){
    matrix A(2,2);square_matrix B(2);vector C(2);vector D(2);
    A.scan_matrix();B.scan_matrix();C.scan_matrix();D.scan_matrix();
    matrix F=(A+B);F.print_matrix();
    vector E(C+D);
    system("pause");
}