2.1.6 Le constructeur de copie

Et oui, j'avais dis encore deux, plus qu'un donc.

Comment l'ordinateur peut-il savoir comment copier un type qu'il ne connaît pas ?

Et bien il faut lui dire, non ?

Tout juste.

Nous allons devoir redéfinir ce que l'on appel le constructeur de copie, qui permet de dire comment on copie la classe que l'on a définie.

Le constructeur de copie à le même nom que le constructeur mais il prend en paramètre le type à copier.

Le constructeur de copie de Shadok s'écrit comme ceci :

1
Shadok(const Shadok & shadok);

Pourquoi il y a un const Shadok & au lieu d'un Shadok tout court ?

Cette fonction définit la copie de la classe Shadok, or, quand on passe un paramètre à une fonction, le paramètre est copié. Et il ne faut pas copier le paramètre que l'on passe pour expliquer comme on copie ce paramètre, ça n'a pas de sens (comme un béret).

Donc on met const Shadok & pour dire au compilateur que l'on veut passer par référence le paramètre shadok (sans le copier) et le const indique au compilateur que l'on ne va pas le modifier.

Voilà ce que ça donne dans le fichier shadok.h :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef __SHADOK_H__
#define __SHADOK_H__

#include <iostream>
#include <string>

namespace ShadokOption{
	enum Type{
		SHADOKDUHAUT,
		SHADOKDUBAS,
	};
};

class Shadok{
	public:
		Shadok();
		Shadok(const Shadok & shadok);
		~Shadok();
	
};

#endif

Maintenant on va pouvoir ajouter les méthodes et les attributs.