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++] classe virtuelle?

Virtuality
Virtuality
Niveau 8
18 décembre 2005 à 13:57:58

Re-Salut,

voila, donc j´ai pu faire des recherches sur le web.
J´ai commencé par le double dispatching qui avait l´air de m´intéresser, mais je n´ai rien trouvé de bien intéressant, mis à part ceci : more effective c++
Il à l´air intéressant, et je me demande si je pourrai en tirer qq chose.
Car pour le moment je suis au "language C++" ou il fait du polymorphisme sur 200 pages :-p

J´ai aussi regardé pour le dp strategy, j´ai trouvé des shémas, à quoi ça peut servir, mais rien sur le fonctionement, aucun exemple d´implémentation...
Bref, si qqn pouvait m´orienter vers une solution (bouquin par exemple, car celui que tu as donné LGV ne me semble pas destiné vu ce que tu as dis), j´ai pas envie de faire des conneries, acheter un mauvais bouquin, commencer à coder comme un barbare (je l´ai déjà bien assez fait), et j´ai vraiment envie de progresser.
Je vous en remercie d´avance.

godrik
godrik
Niveau 30
19 décembre 2005 à 17:08:49

avant d´attaquer "more effective C++" commence par "effective C++" qui me semble t´il (je n´ai pas lu MEC++) est un pre-requis.

je penses que ces livres sont tres bien pour quelqu´un qui a deja vraiment utilisé du C++ mais qui l´a utilisé en faisant des erreurs. (Ceci est mon idée, elle est peut etre fausse) Mais je pense que TOUT les developpeurs C++ devrait avoir lu ces livres (bien que je n´ai pas encore lu le deuxieme, allez, hop, un truc a commande sur amazon)

Virtuality
Virtuality
Niveau 8
19 décembre 2005 à 18:52:09

Merci beaucoup godrik, je n´avais pas vu qu´il y avait celui la.
Mais quand tu dis "a deja vraiment utilisé du C++", je doute quelque peu, je fais du c++ depuis 8 mois, en tant qu´amateur et simplement par passion. Je n´ai donc pas fait des progrès ENORMES, ce qui fait que je sais pas à quoi m´identifier?
Devrais-je faire d´autres projets avant de continuer ? si oui se propose le problème dont je vous ai parlé, je n´ai pas les capacités de le faire pour le moment.
Ou alors il est temps que je passe à une phase de "théorie" plus poussée?

Vous en pensez quoi?
merci... :)

godrik
godrik
Niveau 30
19 décembre 2005 à 18:56:50

c´est a ca que je pensais, a quelqu´un qui a un peu de recul par rapport au C++.
je ne penses pas qu´a la sortie d´un tutoriel de C++ tu sois "psychologiquement" pres pour "effective c++" :)

Virtuality
Virtuality
Niveau 8
19 décembre 2005 à 19:48:09

bon, pour préciser donc lol, je sors pas "d´un tutoriel".
J´ai lu "le language C++" qui fait quand même 350 pages, j´ai des notions, j´aimerais approffondir.
Donc je demande : y a t-il un niveau intermédiaire?
Ou y a-t-il un moyen simple de résoudre mon problème initial tout en restant dans l´esprit "bon programmeur" lol ?
Je suis dans une phase un peu perturbée lol, merci de votre aide.

godrik
godrik
Niveau 30
19 décembre 2005 à 19:59:10

je ne parlais pas pour toi, mais pour tout le monde. :)
mais les livre de C++ ne t´apprendrons pas a bien structurer tes programmes. Ils t´apprendront les mecanismes du C++ qui peuvent te faire faire d´enormes erreurs.

Virtuality
Virtuality
Niveau 8
19 décembre 2005 à 20:02:27

Je suis tout à fait d´accord avec toi... comme l´idée d´utiliser du polymorphisme pour qq chose qui ne devait pas l´utiliser...
Comment t´as fais toi?
Existe t-il de la documentation pour apprendre à structurer un programme?
où qq part ou télécharger des codes sources plutots bien codés et compréhensibles?

En général, avec ce que j´ai dis, tu aurais pas une réponse "qq peu précise" à me donner pour me faire avancer (pas que les précédentes me soient inutiles au contraire :) )

Je te remercie de ton intérêt à m´aider :-)

godrik
godrik
Niveau 30
19 décembre 2005 à 20:10:25

j´ai eu des cours de genie logiciel, mais bon... j´imagine que c´est l´habitude qui m´a appris a struturer mes applications.
Mais bon, je ne suis pas spécialement bon dans la dedans...

Tout ce qui est des design patterns peut t´aider je penses. Je ne peneses pas qu´apprendre par l´exemple soit une bonne idée.
Je penses que la dessus LGV, lapintade et JYY auront plus d´information pour toi. Ils font plus de développement que moi.

De facon générale, "keep it simple". si tu as deux facon de faire la meme chose choisit la plus simple a implémenté.
Par exemple pour l´héritage/polymorphisme, il faut l´utiliser pour eviter le:
fnct(){
if (type1)
....
else if (type2)
....
else if (type3)
...
}

Je te remercie de ton intérêt à m´aider

aider les gens en informatique, c´est mon travail! :)

Virtuality
Virtuality
Niveau 8
19 décembre 2005 à 20:48:56

Merci, j´espère qu´ils passeront...
Concernant le polymorphisme et le manager singleton, j´avais seulement pensé à ça, c´est donc pour ça que je bloque (les autres techniques que lgv à citées me sont inconnues).

Comme dans toute choses, s´il manque les notions, on est incapable de faire quoi que ce soit de simple et logique :)

godrik
godrik
Niveau 30
19 décembre 2005 à 22:31:59

tu peux juste faire un key mapper...
tu mappes les touches du clavier sur une fonction et un parametre a lui passer

Virtuality
Virtuality
Niveau 8
20 décembre 2005 à 17:13:21

la fonction map de la STL tu parle? (connais pas le terme de "key mapper" donc je cherche un équivalent :-p )
Le paramètre sera quoi? la touche pressée?
et je fais ensuite un switch dans ma fonction ou je teste toutes les touches?
merci encore :-)

godrik
godrik
Niveau 30
20 décembre 2005 à 21:47:21

mmm
je pensais a une table qui a chaque touche du clavier fait correspondre une fonction a appeler, ainsi qu´un parametre a lui passer
par exemple:
typedef void (*fnct) (void*) ActionFunction;

void deplacementGauche (void* joueur)
{
int numeroJoueur = joueur; //roh le mechant type cast;
getJoueur(numeroJoueur)->deplacerGauche();
}

quelque part a l´initialisation
ActionFunction fnctmap[256];
void* parammap[256];

//quand on appuie sur gauche deplacer a gauche le joueur 1
fnctmap[FLECHE_GAUCHE] = deplacementGauche;
parammap[FLECHE_GAUCHE] = 1;

ta fonciton de recuperation de message:
messageClavier (int toucheappuyer)
{

}

godrik
godrik
Niveau 30
20 décembre 2005 à 21:48:22

heu/...
je complete
messageClavier (int toucheappuyer)
{
if (fnctmap[toucheappuyer] != NULL)
(*fnctmap[toucheappuyer]) (parammap[toucheappuyer]);
}

tu vois l´idée ?

Virtuality
Virtuality
Niveau 8
21 décembre 2005 à 08:06:08

Alors :
je comprend la fonction deplacementgauche, mais je comprend pas à quoi ça sert de mettre le (void* joueur) et non un (int joueur)?
Ensuite l´init :
y a pas de prob pour fnctmap qui indique que touche est appuyée, mais je comprend pas parammap? quel est son rôle?
De plus
"fnctmap[FLECHE_GAUCHE] = deplacementGauche; "
On indique pas l´argument, c´est un oubli ou ça peut vraiment marcher?

finalement la fonction messageClavier, question bête, mais, comment on l´appelle ? :-p
Et ensuite, elle "pointe" vers quoi?
Car je ne comprend pas vraiment cette ligne :
(*fnctmap[toucheappuyer]) (parammap[toucheappuyer]);
Elle fais quoi ? (connais pas cette syntaxe du tout :s )

En fait je vois un peu l´ensemble du code, mais je vois plein de petites impasse et j´ai de la peine à relier ces bouts entre eux :-p

En tout cas merci énormément pour ton aide précieuse :-)

dnob700
dnob700
Niveau 10
21 décembre 2005 à 12:23:49

le void* à la place du int, vient du fait que les fonctions de rappel de ce type prennent souvent un paramètre un void* de manière à être très général. omme ça, quels que soit les arguments que tu veux lui passer tu lui donne un pointeur vers ces arguments et c´est bon.

Par contre caster le (void*) en (int) c´est très très moche. Il vaut mieux le caster en (int*) et donc donner un pointeur vers le numéro du joueur, plutot que le numéro du joueur lui même. Sinon il y a de gros problème de portabilité entre une archi 32 ou 64 bits par exemple.

godrik
godrik
Niveau 30
21 décembre 2005 à 13:56:47

dnob, tu as raison c´est pas tres joli ce que j´ai fait! :)

j´ai ecris (rapidement) une fonction a appeler quand quelqu´un appuye sur une touche.
tu lui passe en parametre la touche appuyer.
fnctmap est un tableau de pointeur de fonction

fnctmap[toucheappuyer] est un pointeur vers la fonction correspondant a la touche "toucheappuyer".

aupart avant tu as intialiser ce tableau de facon a ce que fnctmap[FLECHE_GAUCHE] pointe vers la fonction "deplacer a gauche". Dans ton programme, tu as plusieurs joueurs, donc il faut specifier quel joueur se deplace a gauche tu lui passe donc un parametre dans lequel tu as mis prealablement le numero du joueur qui doit se deplacer quand on appuye sur "FLECHE_GAUCHE"

je met une void* pour etre generique. la fonction deplacergauche a besoin d´un entier (comme le dit dnob700, j´aurais mieux fait de passer un pointeur sur un entier). mais peut etre qu´une autre action neccessitera un autre type de parametre.

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