Bonjour,
J'ai regardé le code de vector pour voir comment faire un itérateur sur sa classe.
En fait, le code de const_iterator (j'ai pris celui là car c'est le premier...) est dans la classe. J'ai voulu sortir la définition de la classe mais ca ne fonctionne pas. Pourtant il y a bine la déclaration. pourquoi faut il mettre la définition dans la classe qui implémente l'itérateur ?

Voici un extrait d'un code vite fait :
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
 
class Chaine
{
public:
		Chaine(const char* ch)
		{
			lg=strlen(ch);
			chaine=new char[lg+1];
			strncpy(chaine,ch,lg);
			chaine[lg]=0;
		}
 
		Chaine()
		{
			lg=0;
			chaine=0;			
		}
 
		Chaine operator+=(const Chaine&); 
		Chaine operator+(const Chaine&) const;
		Chaine operator++(int);
 
		friend ostream& operator<<(ostream& f,Chaine& c);
 
	class const_iterator;
	friend class const_iterator;
 
class const_iterator
		//: public _Ranit<_Ty, _Dift, _Ctptr, const_reference>
{	// iterator for nonmutable vector
	public:
		/*typedef random_access_iterator_tag iterator_category;
		typedef _Ty value_type;
		typedef _Dift difference_type;
		typedef _Ctptr pointer;
		typedef const_reference reference;*/
 
		const_iterator()
			{	// construct with null pointer
			_Myptr = 0;
			}
 
		const_iterator(int* _Ptr)
			{	// construct with pointer _Ptr
			_Myptr = _Ptr;
			}
 
		const_iterator& operator++()
			{	// preincrement
			++*_Myptr;
			return (*this);
			}
 
	int* _Myptr;	// offset of element in vector
};
 
//private:
	int lg;
	char* chaine;
};
 
...
int main()
{
	Chaine a("A");	
	Chaine b("B");
	cout<<a.lg<<endl;
	Chaine::const_iterator i(&a.lg);
	i++;
	cout<<a.lg<<endl<<endl;
...
Et au passage, j'ai aussi 2 autres petites questions.
Soit une class A. Quel est la différence entre les 2 lignes suivantes :
Enfin, quelqu'un sait il pourquoi le C++ ne permet pas la surcharge du destructeur (il pourrait appeller le destructeur sans paramètre par défaut à la fin de vie d'une instance, non ?). Dans le cas d'un programme, j'aimerais bien pouvoir ne pas détruire un le contenu d'un vector pour l'utiliser dans une autre classe.
J'aurais donc besoin de surcharger le destructeur. Sinon, je peux faire une méthode détruire qui appelle le destructeur sans détruire le contenu du vector, mais ca risque de poser des problèmes au niveau de la maintenabilité du code...

Merci