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++ Instance d'objet

matlab10
matlab10
Niveau 7
15 mai 2017 à 18:50:04

Bonjour à tous,

Tout d'abord, je tiens à vous dire que je suis débutant en C++ [[sticker:p/1lmk]] Je suis en train de créer un petit jeu en utilisant Qt et je fais face au petit problème suivant :

J'ai 3 classes A, B et C. Les classes A et B peuvent créer un objet de la classe C qui dispose d'un constructeur et d'un slot public (une méthode).

Ce que je voudrais faire c'est de pouvoir différencier les cas où l'objet de la classe C est "instancié" (créé) par la classe A de ceux où l'objet de la classe C est créé par la classe B.
En gros : if (objet C est créé par class A){ do something } else{ do something else} ...

Merci d'avance ! [[sticker:p/1kku]]

Message édité le 15 mai 2017 à 18:50:24 par matlab10
89ron
89ron
Niveau 10
15 mai 2017 à 19:53:45

C'est pas possible. de faire cela de cette maniere.

1. Soit tu utilises la notion d'heritage et tu peux alors tester avec un dynamic_cast<A>(C) , par exemple.
2. Soit l'objet de Classe C est creer et reste dans A et B et on accede a l'objet via des getters.

Mais je pense qu'il est encore trop tôt. pour que tu te lance dans Qt a mon avis.

Ps: J'espere que tu n'utilises pas le vieux tuto de Openclassroom sur le C++ avec la partie sur Qt.

Ebara
Ebara
Niveau 16
15 mai 2017 à 20:43:57

Je ne suis pas dév C++, mais tu peux éventuellement stocker la donnée dans une propriété de C

MrBeauf
MrBeauf
Niveau 7
16 mai 2017 à 10:29:12

Le 15 mai 2017 à 19:53:45 89ron a écrit :
C'est pas possible. de faire cela de cette maniere.

1. Soit tu utilises la notion d'heritage et tu peux alors tester avec un dynamic_cast<A>(C) , par exemple.

C'est la meilleure solution je pense

saleGauss
saleGauss
Niveau 9
16 mai 2017 à 15:48:11

Sans avoir plus de détail sur la sémantique de tes objets, ce n'est pas évident de te conseiller un design en particulier. Pourquoi a tu besoin de ça ?

Ça donne quand même l'impression d'un mauvais design et d'une mauvaise gestion des rôles et responsabilités de chaque classe, que C doive enregistrer quelle classe l'a créé. Il faudrait peut être revoir ton découpage des classes et les liens entre eux (avec effectivement éventuellement de l'héritage, toujours suivant la sémantique des choses).

Après tu as la solution bourine de simplement ajouter un paramètre (disons, un booléen) au constructeur de C, et quand tu l'appel depuis une méthode de A, de passer 'true', et quand tu l'appel depuis B, de passer 'false'. L'inconvénient, c'est que du coup c'est had hoc, et que le compilateur ne vérifiera pas que tu as effectivement appelé avec true depuis A et avec false depuis B. C'est donc assez casse gueule à maintenir quand tu rajouteras des appels au constructeur de C, et potentiellement source de bugs. Mais si tu veux vite régler ton problème, ça peut marcher.

Mais j'insiste, il doit y avoir un problème avec ton design. Après tu découvres le C++ (et surement l'orienté objet), donc c'est normal, et c’est pour ça que j'ai proposé une solution "sale" pour te débloquer rapidement.

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