2.5.2 Écrire une fonction de copie

Autant prendre les bonnes habitudes tout de suite, si vous comparez le constructeur de copie à l'opérateur = vous allez constater qu'il y a trois lignes identiques, donc nous allons faire une fonction de copie que nous allons appeler deux fois.

Mais il n'y a que trois lignes.

Pour le moment oui, mais il est très important de ne faire qu'une modification quand on veut faire un changement, car il y a toujours un moment ou vous allez oublier de copier une variable dans d'une ou l'autre de ces deux fonctions, et là vous allez rager sans savoir pourquoi, donc prenez les bonnes habitudes tant qu'il est temps.

Nous allons donc écrire une fonction privée (c'est juste pour la classe Shadok) qui va copier les attributs. Vous pouvez écrire ce prototype entre les attributs et le mot clé private.

Voici son prototype (dans shadok.h) :

1
void copyShadok(const Shadok & shadok);

Et voici son implémentation (dans shadok.cpp) :

1
2
3
4
5
void Shadok::copyShadok(const Shadok & shadok){
	p_nom = shadok.p_nom;
	p_age = shadok.p_age;
	p_type = shadok.p_type;
}

Et nous devons donc modifier le constructeur de copie :

1
2
3
Shadok::Shadok(const Shadok & shadok){
	copyShadok(shadok);
}

Et l'opérateur = :

1
2
3
4
Shadok & Shadok::operator = (const Shadok & shadok){
	copyShadok(shadok);
	return *this;
}

Voilà qui est mieux.