Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/03/2011, 14:32
Checho360
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 1 mes
Puntos: 3
Herencia de una clase

Hola; estoy creando otro programa probando con eso de la herencia y tengo una duda acerca de una cosa. El código es el siguiente:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cmath>
  3. #define MAX_SIZE 10
  4. using namespace std;
  5.  
  6. class matrix {
  7.       public:
  8.              int col, fil;
  9.              double s[MAX_SIZE][MAX_SIZE];
  10.              matrix (int n, int m);
  11.              matrix(const matrix& A);
  12.              matrix operator = (matrix A);
  13.              matrix operator + (matrix A);
  14.              matrix scan_matrix (void);
  15.              void print_matrix (void);
  16.              ~matrix(){}
  17.       };
  18.      
  19. matrix :: matrix(int n, int m){
  20.        if(n>MAX_SIZE){
  21.                       cerr<<"ERROR: el numero de filas introducidas es mayor del permitido";
  22.                       fil=MAX_SIZE;
  23.                       }
  24.        else{
  25.             fil=n;
  26.             }
  27.        if(m>MAX_SIZE){
  28.                       cerr<<"ERROR: el numero de columnas introducidas es mayor del permitido";
  29.                       col=MAX_SIZE;
  30.                       }
  31.        else{
  32.              col=m;
  33.             }
  34. }
  35.  
  36. matrix :: matrix (const matrix& A){
  37.        fil=A.fil;col=A.col;
  38.        for(int i=0;i<A.fil;i++){
  39.                for(int j=0;j<A.col;j++){
  40.                        s[i][j]=A.s[i][j];
  41.                        }
  42.                }
  43. }
  44.  
  45. matrix matrix :: operator + (matrix A){
  46.        if(col!=A.col || fil != A.fil){
  47.                      cerr<<"ERROR: el numero de filas o columnas de las matrices introducidas no coincide\n";
  48.                      }
  49.        matrix C(A.fil,A.col);
  50.        for(int i=0;i<A.fil;i++){
  51.                for (int j=0;j<A.col;j++){
  52.                    C.s[i][j]=s[i][j]+A.s[i][j];
  53.                }
  54.        }
  55.        return C;
  56. }
  57.  
  58. matrix matrix ::operator = (matrix A){
  59.        fil = A.fil; col = A.col;
  60.        for(int i=0;i<A.fil;i++){
  61.                 for (int j=1;j<A.col;j++){
  62.                 s[i][j]=A.s[i][j];
  63.                 }
  64.        }
  65. }
  66.  
  67. matrix matrix :: scan_matrix (void){
  68.        for (int i=0;i<fil;i++){
  69.            for(int j=0;j<col;j++){
  70.                    cout<<"Introduzca el coef "<<i<<" "<<j<<"\n";
  71.                    cin>>s[i][j];
  72.                    }
  73.            }
  74. }
  75.  
  76. void matrix :: print_matrix (void){
  77.      for (int i=0;i<fil;i++){
  78.          for(int j=0;j<col;j++){
  79.                  cout<<"El coef "<<i<<" "<<j<<" = "<<s[i][j]<<"\n";
  80.                  }
  81.          }
  82. }
  83.  
  84. class square_matrix : public matrix {
  85.       public:
  86.              square_matrix(int size) : matrix (size,size) {}
  87.              ~square_matrix () {}
  88. };
  89.  
  90. class vector : public matrix {
  91.       public:
  92.              vector (int size) : matrix(1,size) {}
  93.              ~vector () {}
  94. };
  95.  
  96. int main (){
  97.     matrix A(2,2);square_matrix B(2);vector C(2);vector D(2);
  98.     A.scan_matrix();B.scan_matrix();C.scan_matrix();D.scan_matrix();
  99.     matrix F=(A+B);F.print_matrix();
  100.     matrix E(C+D);
  101.     system("pause");
  102. }

Si os fijais en las ultimas lineas sumo dos vectores y esta suma la tengo que almacenar en un objeto de la clase matrix. Es logico porque arriba a la hora de declarar las funciones tengo escrito "matrix operator", lo cual dice que devuelve un objeto del tipo "matrix". Me preguntaba si se podría modificar el código de alguna manera para poder almacenar la suma en un objeto del tipo "vector" en lugar del tipo "matrix".

Un saludo!!