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 ?
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.
-- ;-)
On Thu, 05 Aug 2004 09:14:42 +0200, Loïc Joly
<loic.actarus.joly@wanadoo.fr>:
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.
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.