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

Cita:
Iniciado por dragg04 Ver Mensaje
Que error te arroja
Da muchos errores, prueba tu mismo.

Me dieron una solución en otro sitio: sobrecargar el constructor copia de vector para que reciba una matriz y declarar un constructor default en la clase matrix. Quedaría asi:

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

Aunque no entiendo muy bien por que funciona asi :P

Un saludo!!