CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(C++) Cast par référence

Fvirtman
Fvirtman
Niveau 10
14 septembre 2006 à 10:26:16

Salut !

Un truc qui m´échappe :

J´ai 2 classes C1 et C2. J´instancie

C1 a;
C2 b;

Quelle est la différence entre :

a = (C1)b;
a = (C1&) b;

Quels constructeurs ou méthodes doivent etre mis en place dans les 2 cas pour que ça compile ? Quels mécanismes sous jascents ça appelle ?

Je n´ai jamais casté avec un &, j´avoue que les mécanismes m´échappent sur ce point.
Merci de vos réponses.

godrik
godrik
Niveau 30
14 septembre 2006 à 12:25:58

Un operateur de cast doit suffire ou alors un constructeur C1::C1(const C2 &)
Je penses qu´il y a dans le premier cas une construction d´un objet anonyme de type C1 avec comme parametre l´objet b de type C2 qui est passé a l´opérateur de recopie de l´objet a avec un parametre C1
donc la fonction C1& operator= (C1&, const C1)
cette fonction devrait etre substituer par C1& operator= (C1&, const C1&) si elle n´est pas disponible
tandis que je penses que la deuxieme forme appelle directement C1& operator= (C1&, const C1&)

Apres, je n´ai pas testé.

dnob700
dnob700
Niveau 10
14 septembre 2006 à 14:47:24

si tu teste ce genre de chose avec VC++, je te conseille de le tester aussi avec dev C++ (ou un autre gcc), car j´ai remarqué qu´il était beaucoup plus restrictif sur les références que VC++ : par exemple il me sort un warning (ou une erreur) lorsqu´une fonction qui renvoie un objet est passé directement en paramètre (avec ses propres paramètres) à une fonction qui attend une référence (ou bien le contraire) alors que VC++ ne pose pas de question.

j´ai l´impression qu´il ne considère pas que C1 et C1& soit équivalent. Ensuite, c´est vrai qu´avec un cast explicite peut-être qu´il ne dira rien.

Fvirtman
Fvirtman
Niveau 10
14 septembre 2006 à 14:53:40

test avec Visual C++ :

En effet, en cast normal, y´a une recopie :)

  1. include <iostream>

using namespace std;

class A
{
public:
A(){cout << "A::A()" << endl;}
~A(){cout << "A::~A()" << endl;}
A(const A&){cout << "A::A(const A&)" << endl;}
A& operator=(const A&){cout << "A& A::operator=(const A&)" << endl;return *this;}
};

class B
{
public:
B(){cout << "B::B()" << endl;}
~B(){cout << "B::~B()" << endl;}
B(const B&){cout << "B::B(const B&)" << endl;}
B& operator=(const B&){cout << "B& B::operator=(const B&)" << endl;return *this;}
B(const A&){cout << "B::B(const A&)" << endl;}
};

int main()
{
cout << "--- init" << endl;
A a;
B b;
cout << "--- test1" << endl;
b = (B)a;
cout << "--- test2" << endl;
//a = (A)b; <--- plante a la compil : manque mét
hode pour convertir, logique.
cout << "--- test3" << endl;
b = (B&)a;
cout << "--- test4" << endl;
a = (A&)b;
cout << "--- end" << endl;
return 0;
}

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment