bonsoir,
je suis un débutant dans le langue C++.J'ai implémenté cette classe
mon problème est que lors de l'utilisation de l'opérateur * qui est surcharger
le programme plante.
S'il vous plait quelqu'un peut il m'indiquer où le problème.
Voici le code de l'interface du classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#include<iostream>
using namespace std;
class registre
{
	int *m_tab,m_taille;
public:
	registre(int =8);
	registre(const registre &);
	~registre();
  	registre &operator*(registre);
	registre &operator+(registre);
	registre &operator<(int);
	registre &operator>(int);
	registre &operator=(const registre &);
	friend ostream &operator<<(ostream &,registre);
	friend istream &operator>>(istream &,registre &);
	void affiche();
	void remplir();
 
 
};
Voici l'implémentation des méthodes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
 
#include "registre.h"
registre::registre(int taille):m_taille(taille)
{
	m_tab = new int[m_taille];
 
}
registre::~registre()
{
	delete []m_tab;
}
registre::registre(const registre &r)
{
	m_taille =r.m_taille;
	m_tab = new int[m_taille];
    for(int i=0;i<m_taille;i++)
		m_tab[i]=r.m_tab[i];
 
}
 
 
 
 
void registre::affiche()
{
		for(int i=0;i<m_taille;i++)
			cout<<"\t"<<m_tab[i];
		cout<<endl;
}
void registre::remplir()
{
	for(int i=0;i<m_taille;i++)
	{
 
			cout<<"entrer 0 ou 1";
			cin>>m_tab[i];
 
	}
	cout<<endl;
 
}
 
registre &registre::operator=(const registre& r)
{
	if(this!=&r)
	{
		delete []m_tab;
		m_taille=r.m_taille;
		m_tab =new int [m_taille];
		for(int i=0;i<m_taille;i++)
			m_tab[i]=r.m_tab[i];
	}
	return *this;
}
 
registre &registre::operator *(registre r)
{
	registre f;
	if(m_taille<r.m_taille)
	{
		f.m_taille=r.m_taille;
		for(int i=0;i<m_taille;i++)
			f.m_tab[i]=m_tab[i]*r.m_tab[i];
		for(int i=m_taille;i<r.m_taille;i++)
			f.m_tab[i]=0;
	}
	else if(m_taille>=r.m_taille)
	{
		f.m_taille=m_taille;
		for(int i=0;i<r.m_taille;i++)
			f.m_tab[i]=m_tab[i]*r.m_tab[i];
		for(int i=r.m_taille;i<m_taille;i++)
			f.m_tab[i]=0;
	}
	return f;
}
remarque
j'ai juste implémenter le constructeur, le destructeur,le constructeur par copier et la méthode de surcharge de l'opérateur *.
Et en fin voici main du programme.
j'utilise visual studio 2008.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
#include "registre.h"
void main()
{
	registre r(2),g(3),f;
	r.remplir();
	g.remplir();
	f=r*g;
	r.affiche();
	g.affiche();
	f.affiche();
 
 
}
je vous remercie d'avance pour votre aide.