#ifndef _MATRICE_H
#define _MATRICE_H
#include <iostream.h>

template <class T> class Vecteur;

template <class T> class Matrice
{      
private:
	T* element;
    int lignes, colonnes;
public:
    Matrice();
    Matrice(int, int);
    Matrice(int, int, int, T*);
    Matrice(Matrice<T>&);
    ~Matrice();
    Vecteur<T> operator[] (int);
    Vecteur<T> operator() (int);
    T& operator() (int, int);
    friend Matrice<T> operator* (T, Matrice<T>&);
    Vecteur<T> operator* (Vecteur<T>&);
    Matrice<T> operator* (Matrice<T>&);
    Matrice<T> operator+ (Matrice<T>&);
    Matrice<T> operator- (Matrice<T>&);
    Matrice<T>& operator= (Matrice<T>&);
    friend ostream& operator<< (ostream&, Matrice<T>&);
	Matrice<T> transposee();
    Matrice<T> sub(int, int, int, int);
    T det(){};
    T trace();
    void afficher();
	int nb_lignes();
	int nb_colonnes();
	Vecteur<int> taille();
};

template <class T> class Vecteur
{
private:
    T* element;
    int lignes;
public:
    Vecteur();
    Vecteur(int);
    Vecteur(int, T*);
    Vecteur(Vecteur<T>&);
    ~Vecteur();
    T& operator[] (int);
    T& operator() (int);
    friend Vecteur<T> operator* (T, Vecteur<T>&);
    T operator* (Vecteur<T>&);
    Vecteur<T> operator+ (Vecteur<T>&);
    Vecteur<T> operator- (Vecteur<T>&);
    Vecteur<T>& operator=(Vecteur<T>);
    friend ostream& operator<< (ostream&, Vecteur<T>&);
    void afficher();
	int longueur();
	int taille();
};

#endif