OVH Cloud OVH Cloud

question sur const

13 réponses
Avatar
thitou
Bonjour a tous,

je suis en train de me familiariser avec le c++
J'ai donc 2 questions :

- Pouvez vous me dire pourquoi mon code ci-dessous ne compile pas.
Je peux le faire compiler en déclarant foo comme étant une fonction
acceptant un objet de type const.
Mais je comprend pas ce que ca fait exactement.

De ce que j'en ai lu, c'est que quand on met const, cela permet
d'empecher la modification d'une variable, mais la je ne comprend pas
trop.

#include <iostream>

class A
{

};

class B: public A
{

};

void foo (A &arg)
{


}

int main (int argc, const char * argv[])
{
B myObjectB;
foo((A)myObjectB);

return 0;
}

- Quel est la différence entre passer un objet a une fonction en tant
que pointeur (*) et le passer en tant que référence (&). Dans les 2
cas, s'agit-il d'une adresse.

J'ai bien compris que cela nous permet de ne pas faire une recopie de
l'objet (passage par valeur), en passant une référence, mais ensuite
je ne connais pas la différence entre * et &.

Dans quel cas utiliser l'un ou l'autre.

De plus j'ai trouvé ce lien très intéressant sur const.
Mais je dois dire que je me comprend pas tout.

- L'auteur parle "d'object slicing" quand on passe un objet par
valeur.
Qu'est-ce que cela veut dire ?

Merci pour vos réponses éclairées...

thierry

3 réponses

1 2
Avatar
Loïc Joly
Fabien LE LEZ wrote:

On 4 Aug 2004 14:04:20 -0700, (thitou):


foo((A)myObjectB);



Ecris plutôt

foo (A (myObjectB));


Bof, si on veut être explicite, autant écrire :

foo (static_cast<A>(myObjectB));

--
Loïc


Avatar
Fabien LE LEZ
On Thu, 05 Aug 2004 09:14:42 +0200, Loïc Joly
:

foo (A (myObjectB));


Bof, si on veut être explicite, autant écrire :

foo (static_cast<A>(myObjectB));


Je trouve cette version moins claire : elle sous-entend qu'on
"convertit" l'objet en objet de classe A, sans que ce que fait
réellement la conversion soit mis en avant. Tandis que ce que j'ai
proposé indique clairement ce qui est fait : création d'un objet de
classe A, avec "myObjectB" comme argument.


--
;-)


Avatar
thitou
Merci a tous pour vos réponses très claires.

Vous m'êtes d'une grande aide.

Thierry
1 2