Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/10/2014, 16:08
alexpglez98
 
Fecha de Ingreso: octubre-2014
Mensajes: 23
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Plantillas de métodos en clases genéricas

Pues así lo puse más o menos. Antes me lanzaba errores por no escribirlo bien, ahora me lanza otros...
Código:
template <class T>
class Matrix {
    private:
        T **matrix;
        int I;
        int J;
        int N;
    public:
        Matrix(int, int, T *p=0);
        T value(int, int);

        template<typename T_1>
        Matrix<T> operator + (const Matrix<T_1> &m_2);
};

template<class T>
Matrix<T>::Matrix(int I, int J, T *p)   //Constructor, reserva memoria y le asigna una matriz que 
{                                                             //almacena la clase
    this->I = I;
    this->J = J;
    N=I*J;
    matrix = new T*[I];

    for (int i = 0; i < I; i++) {
        matrix[i] = new T[J];
    }

    if(p!=0){
        for(int i=0; i< I; i++){
            for( int j=0; j< J; j++){
                matrix[i][j]=p[j+i*J];
            }
        }
    }
}

template<class T>                  //devuelve el dato de la matriz en la posicion i j
T Matrix<T>::value(int i, int j)
{
    return matrix[i][j];
}

template<class T>
template<typename T_1>
Matrix<T> Matrix<T>::operator + (const Matrix<T_1> &m_2) //funcion que me falla
{
    Matrix<T> result(I, J);
    for(int i=0; i<I; i++)
    {
        for(int j=0; j<J; j++)
        {
            result.matrix[i][j]=matrix[i][j]+m_2.matrix[i][j];  //justo aqui
        }
    }
    return result;

}

#include <iostream>

#define data_1 int
#define data_2 int

#define a 5
#define b 2

int main(void){
    data_1 c[a][b]={{0,0},{2,7},{0,0},{4,9},{0,0}};
    data_2 d[a][b]={{1,6},{2,7},{3,8},{4,9},{5,10}};
    Matrix<data_1> M(a, b);
    Matrix<data_1> C(a, b, &c[0][0]);
    Matrix<data_2> D(a, b, &d[0][0]);
    M=C+D;
   
    for(int i=0; i<a; i++){                // imprime la matriz
        for(int j=0; j<b; j++){
            std::cout << M.value(i,j) << " ";
        }
        std::cout << std::endl;
    }
    return 0;
}
Así por ejemplo me va, si hago diferente data_1 de data_2, me da errores de que el segundo dato es privado..