Creation de class en C++

js1000 Messages postés 1 Date d'inscription samedi 8 mai 2004 Statut Membre Dernière intervention 30 juin 2005 - 30 juin 2005 à 15:53
cs_0xYg3n3 Messages postés 115 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 8 octobre 2007 - 3 juil. 2005 à 20:23
Bonjour a tous !

Je suis novice en C++ et je suis en train d'apprende les bases. J'ai donc une question a vous posez :

Je veux ecrire une classe Matrice pour me faire la main permettant de faire du calcul sur un objet Matrice.

class Matrice {
public :
..... des variables et mon tableau a deux dimension
Matrice(int,int);
~Matrice();
};

Lorque ma classe est ecrite je crée mon objet de la facon suivante :

Matrice M(3,3); // Matrice 3x3

Mes questions sont les suivantes :

- Est il possible lorsque je declare une matrice M1 par exemple que "M1" soit automatiquement mis dans une chaine de caractere de la classe (cad de mettre le nom de la variable dans une chaine de car.)
- Comment faire pour utiliser ma matrice de la facon suivante :

int i = M(1,0); // Mettre dans i la valeur contenu dans M a la ligne 1 colonne 0

Merci beaucoup d'avance

4 réponses

cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
30 juin 2005 à 17:00
Tu peux éventuellement rajouter un paramètre a ton constructeur et un membre à ta classe

class Matrice {
public :
Matrice(int,int,char *nom);
~Matrice();
private :
char m_nom[10];
...
};

// dans le .cpp
#include <stdio.h>
#include <string.h>

Matrice::Matrice(int n, int m, char *nom)
{
// traitementde n et m
strcpy(m_nom,nom)
...
}

Quant à la seconde question, ajoute une fonction membre Get(int i, int j) qui retourne la valeur i,j

Tu feras l'appel :

int i = MaMatrice.Get(1,0);

Optimiser, c'est bien, déboguer c'est mieux
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 juin 2005 à 18:25
Pour obtenir "M1" à partir M1, cela peut être fait avant la compilation, grace au préprocesseur. Tu veux par exemple créer une marcro:

#define CreerMatrice(nom, x, y) Matrice nom(x, y, #nom)

Puis tu fais CréerMatrice(M1, 3, 3);
Dans la classe, tu peux considérer que la variable m_nom est constante, donc pas besoin de strcpy:

class Matrice
{
const char* m_nom;

Matrice(int n, int m, char *nom)
{
m_nom = nom;
...
}
};
0
cs_Stubbornman Messages postés 80 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 12 janvier 2007
1 juil. 2005 à 08:41
Pour ce qui est de ta seconde question, tu peux redefinir l'opérateur () de la façon suivante:

int Matrice::operator () (int i, int j)
{
return _data[i][j];
}

avec l'hypothese que tu ai créé ta classe comme ceci:

class Matrice
{
// Membres publics:
int _row;
int _column;
int** _data;

// Constructeur et destructeur
public:
Matrice(int i, int j);
virtual ~Matrice();

public:
int operator () (int i, int j);

...

}

et le constructeur comme ceci:
Matrice::Matrice(int i, int j) :
_row (i),
_column (j)
{
_data = new int*[_row];
for int i = 0; i < _row; i++)
_data[i] = new int[row];
}

evidemment ne pas oublier de faire delete[] dans le destructeur...

Cependant tu peux voir que de cette facon, ta matrice est forcement une matrice de int. Hors une matrice pourrait etre remplie egalement de float, double, unsigned int... que les methodes seraient inchangées... Dans ce cas, on peut utiliser les templates.

J'espere que ca t'aidera.
0
cs_0xYg3n3 Messages postés 115 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 8 octobre 2007
3 juil. 2005 à 20:23
Je crois que vous avezoublie qu'il est novice en programmation.

Et que vous parlez déjà de surdefinir un operateur.
0
Rejoignez-nous