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

Si mira te comento al completo:

Si utilizo lo que dices:

Código C++:
Ver original
  1. vector :: vector (const matrix& A):matrix(A){
  2.        col=A.col;
  3.        for(int i=0;i<A.fil;i++){
  4.                s[0][i]=A.s[0][i];
  5.                }
  6. }

Funciona, aunque no se muy bien como va eso porque yo todas las declaraciones que lei del constructor copia era:

Código C++:
Ver original
  1. vector :: vector (const matrix& A)


En lugar de:

Código C++:
Ver original
  1. vector :: vector (const matrix& A):matrix(A)

Ademas si pruebo con el operador + sobrecargado tambien funciona:

Código C++:
Ver original
  1. vector vector :: operator + (vector m){
  2.        vector C(m.col);
  3.        for(int i=0;i<m.col;i++){
  4.                C.s[0][i]=s[0][i]+m.s[0][i];
  5.                }
  6.        return C;
  7. }

Pero si pruebo con el operador = no funciona:

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(0,size) {}
  94.              vector () {};
  95.              vector operator = (matrix m);
  96.              ~vector () {}
  97. };
  98.  
  99. vector vector :: operator = (matrix m){
  100.        vector C(m.col);
  101.        for(int i=0;i<m.col;i++){
  102.                C.s[0][i]=m.s[0][i];
  103.                }
  104.        return C;
  105. }
  106.  
  107. int main (){
  108.     vector C(2);vector D(2);
  109.     C.scan_matrix();D.scan_matrix();
  110.     vector E=(C+D);E.print_matrix();
  111.     system("pause");
  112. }

El error que arroja es:

Código:
110 conversion from `matrix' to non-scalar type `vector' requested
Un saludo y gracias por ayudarme!!