Clase Matriz con plantillas (template): C/C++

Después de haber decidido aprender algo de teledetección, también le he puesto empeño a aprender el C++ con clases. Vuelvo con la clase Matriz pero esta vez con templates (plantillas). Para no atiborrarla de definiciones de métodos, sólo he incluido aquellos que permiten construir los objetos, iniciarlos e imprimirlos por pantalla; esto último sobrecargando el operador <<. Como el uso de templates trae algunos problemas con el uso de funciones amigas me toco investigar en Google para resolverlo. Esta es la implementación de la clase Matriz:

#include <iostream>

using namespace std;

#include <iomanip>
#include <cstdlib>

template<typename T> class Matriz;
template<typename T> ostream& operator<< (ostream &salida, Matriz<T> &z);

template <class T>

class Matriz {

private:

	T **a;
	int rows, cols;

public:

	Matriz(int m, int n);
	void initMatriz(T **x);

	friend ostream& operator << <> (ostream &salida, Matriz<T> &z); //sobrecarga del operador <<

};

//Constructor por parametros

template<typename T>

Matriz<T>::Matriz(int m , int n){

	int i;

	rows = m;

	cols = n;

	a = new T*[rows];

	for(i = 0; i< rows; i++){

		a[i] = new T[cols];

	}

}

template<typename T>

void Matriz<T>::initMatriz(T **x){

	int i,j;

	for(i=0; i < rows; i++){

			for(j=0; j < cols; j++){

				a[i][j] = x[i][j]; 
		
		}
	}
	

}

template<typename T>

ostream &operator << (ostream &salida, Matriz<T> &z){//sobrecarga del operador <<

	salida.setf(ios::fixed);
	salida.precision(4);	

	int i, j;

	for (i = 0; i < z.rows; i++) {

		for (j = 0; j < z.cols; j++) {

			salida << setw(10) << z.a[i][j];

		}

        salida << "\n";
     
	}
      
	return salida;

} 

El programa principal para probar el desempeño de la clase:

#include "Matriz.h"

int main(){

	system ("clear");

	Matriz<double> a(3,3);

	int i, rows, cols;

	double **m;

	rows = 3;

	cols = 3;

	m = new double *[rows];

	for(i = 0; i< rows; i++){

		m[i] = new double [cols];

	}

	m[0][0] = 1, m[0][1] = 2, m[0][2] = 3,
	m[1][0] = 4, m[1][1] = 5, m[1][2] = 6,
	m[2][0] = 7, m[2][1] = 8, m[2][2] = 9;

	a.initMatriz(m);

	cout << "Imprime el objeto a:\n\n" << a;

	return 0;

}

y su salida:

Imprime el objeto a:

    1.0000    2.0000    3.0000
    4.0000    5.0000    6.0000
    7.0000    8.0000    9.0000

Ahora tocará ir agregando más métodos.

Esta entrada fue publicada en Código C++. Guarda el enlace permanente.

Una respuesta a Clase Matriz con plantillas (template): C/C++

  1. Pingback: Métodos Clase Matriz con plantillas (template): C/C++ |

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s