|
|
|
|
Bonsoir,
Quelqu'un pourrait-il m'éclairer sur la façon de programmer un Vecteur Template?
De ce que j'en sais, on peut créer en C++ des vecteurs dont la nature des éléments peut être définie de manière dynamique.
Pour l'heure, j'ai tenté de faire en glânant des informations ci et là mais je n'y arrive vraiment pas :(
Voici ce que j'ai fait (si quelqu'un aurait la bonté de me dire ce qui cloche) :
/*Fichier "Vecteur.h*/
#ifndef _VECTEUR
#define _VECTEUR
template <class T> class Vecteur
{
private :
T *data;
int NbElem;
public :
/*Constructeur par défaut*/
Vecteur ();
/*Constructeur d'initialisation*/
Vecteur (const int INIT_NbElem);
/*Destructeur*/
~Vecteur ();
/*Methodes "getXXX ()"*/
T* getElement () const;
/*Methodes "setXXX ()"*/
void setElement (const int Set_Indice, const T* Set_Element);
/*Méthode d'affichage*/
void affiche ();
};
#endif
/*Fichier "Vecteur.cxx*/
#include "Vecteur.h"
#include <string>
#include <iostream.h>
#include <stdlib.h>
/*using namespace std;*/ /*Permet d'utiliser les cout avec une syntaxe moins lourde*/
/**************************************/
/*DECLARATIONS DES METHODES "getXXX()"*/
/**************************************/
*T Vecteur<class T>::getElement () const
{
return data;
}
/**************************************/
/*DECLARATIONS DES METHODES "setXXX()"*/
/**************************************/
void Vecteur<class T>::setElement (const int Set_Indice, const T Set_Element)
{
data[Set_Indice] = Set_Element;
}
/*************************/
/*CONSTRUCTEUR PAR DEFAUT*/
/*************************/
Vecteur<class T>::Vecteur ()
{
cout << "Nous utilisons le constructeur PAR DEFAUT de Vecteur." << endl;
data = new type[10];
NbElem = 10;
}
/*******************************/
/*CONSTRUCTEUR D'INITIALISATION*/
/*******************************/
Vecteur<class T>::Vecteur(const int INIT_NbElem)
{
cout << "Nous utilisons le constructeur d'INITIALISATION de Vecteur." << endl;
data = new type[INIT_NbElem];
NbElem = INIT_NbElem;
}
/*************/
/*DESTRUCTEUR*/
/*************/
Vecteur<class T>::~Vecteur ()
{
cout << "Destructeur de Vecteur en cours..." << endl;
if (data)
{
delete data;
}
cout << "Destructeur de Vecteur termine." << endl;
}
/**********************/
/*FONCTION D'AFFICHAGE*/
/**********************/
void Vecteur<class T>::affiche ()
{
int i;
while (i < NbElem)
{
cout << data[i] << endl;
i++;
}
}
/*FIN DE CODE*/
Voilà, voilà.
Merci d'avance ^^
Configuration: Windows XP Internet Explorer 7.0
Bonsoir,
|
Merci beaucoup pour cette réponse :)
|
Hey bien tu as déclaré une signature
template <class T>
Vecteur<T>::Vecteur ()
{
cout << "Nous utilisons le constructeur PAR DEFAUT de Vecteur." << endl;
data = new type[10];
NbElem = 10;
}
new type => new T[10]; (erreure plusieurs fois) Bon ça devrait être mieux :) Ceci est une signature. |
Yay! ^^
|
Re,
|
Mmh... Je tente de tester comme ça donc.
|
Heu question complètement stupide, pourquoi tu ne réutilise pas simplement la classe std::vector de la STL ? C'est un exercice ?
|
Effectivement, fait attention, tu as mis des templates dans un .cpp ....
template Vecteur<int>; dans ton fichier .cpp Voilà, sinon il y a la classe "vector" bien sûre mais je pensais que tu programmais cela comme un exercice... Ceci est une signature. |