13/10/2014, 16:08
|
| | 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.. |