Les objets

En Java, tous les objets sont des références. En C++ on a le choix. Par défaut, un objet n’est pas une référence, mais bien est une variable qui contient tous les attributs et les références vers les méthodes.

Point p(12,42);

On peut aussi déclarer un objet avec le constructeur par défaut :

Point p;

En Java, une déclaration similaire déclare une référence non initialisée (null) vers un point. En C++ cette déclaration crée l’objet et l’initialise.

Si on copie un objet, on copie effectivement tous les attributs :

Point q = p;

En Java, l’instruction ci-dessus n’aurait fait qu’une nouvelle référence vers l’objet p, mais C++ crée réellement un nouvel objet. Après avoir créé l’objet, C++ appelle également un “copy-constructeur”. Vous pouvez définir votre propre constructeur, mais si nous n’en définissez aucun, C++ définira un “trivial copy-constructeur” pour vous. Dans la plupart des cas, le “trivial copy-constructeur” est suffisant, car il copie récursivement tous les attributs de l’objet, mais si l’objet contient des pointeurs, il les copiera également tels quels, c’est-à-dire que les deux objets pointeront vers le même élément. Pour plus de détails concernant les “copy-constructeurs” nous vous conseillons de lire la page copy_constructor1 sur cppreference.com.

C++ n’est pas obligé de copier chaque objet et supporte également le concept de référence en faisant appel aux pointeurs. Nous verrons ça plus tard dans ce chapitre.