C++ #20 - polymorphisme

  Рет қаралды 11,844

FormationVideo

FormationVideo

Күн бұрын

Пікірлер: 59
@formation-video
@formation-video 2 жыл бұрын
💡 Dès lors que votre classe est abstraite (quand au moins une de ses méthodes est virtuelle pure), elle ne peut évidemment plus être instanciée.
@sebastiencoquil9718
@sebastiencoquil9718 Жыл бұрын
Merci pour ton travail. Tes vidéos sont qualitatives. Chaque été, je viens par ici pour en apprendre un peu plus en info, donc encore une fois, merci !
@formation-video
@formation-video Жыл бұрын
Merci pour la donation, et merci de suivre mon travail 🙏
@__LIAM.77
@__LIAM.77 Жыл бұрын
C'est une partie très compliquée et je risque de regarder cette vidéo de nombreuse fois pour tout bien assimiler ! Encore merci pour ton travail incroyable !
@formation-video
@formation-video Жыл бұрын
Bon visionnage, et si tu as besoin d'explications supplémentaires plus "globales", il y a cette vidéo d'aide sur les notions de programmation objet : kzbin.info/www/bejne/a5uYq2x4f6h0jZo
@__LIAM.77
@__LIAM.77 Жыл бұрын
Merci ;)@@formation-video
@formation-video
@formation-video Жыл бұрын
👍
@ferdinandati7798
@ferdinandati7798 6 ай бұрын
salut jason . Tes vidéos m'aide beaucoup dans mes cours à l'université . Je te remercie infinement . Que dieu te bénisse
@formation-video
@formation-video 6 ай бұрын
Bon courage 💪
@ferdinandati7798
@ferdinandati7798 6 ай бұрын
@@formation-video merci
@KisaPulga
@KisaPulga Жыл бұрын
Super vidéo, j'ai déjà regardé toutes celles d'avant et tu fais de vraies master class ;) Tes vidéos m'aident beaucoup pour mes études !
@formation-video
@formation-video Жыл бұрын
Bonne continuation pour la suite alors 🥳
@nicolascappeliez2651
@nicolascappeliez2651 2 жыл бұрын
Comme toujours, très bonne vidéo. Elle donne hâte de voir la suite (et surtout les conteneurs pour ma part). Bien que j'avoue avoir du mal à distinguer encore les cas où telle ou telle type de classe est plus propre... mais ça viendra. C'est en forgeant... 😁 Bravo et merci!! 😀
@formation-video
@formation-video 2 жыл бұрын
Tu bloques sur quoi exactement ?
@nicolascappeliez2651
@nicolascappeliez2651 2 жыл бұрын
@@formation-video Je vais donner un exemple parlant car c'est dans mon petit projet de gestion d'un petit magasin pour mon boulot. J'ai créé une classe "informations" qui gère les informations générales d'un produit (Désignation, description, consignes de sécurité. Une autre classe gérant des seuils mini / maxi avec des méthodes d'alerte. Une classe "prix" permettant de gérer le HT, TTC, la TVA et même la devise (avec conversion en passant le taux). Enfin, je crée une classe "produit" qui permet la gestion d'un produit... il y a un prix, une étiquette, des seuils... Et là, je bloque (j'hésite longtemps avant de me lancer et de me tromper :D )... un objet instancié? Un pointeur? Un héritage? Là, j'ai souvent du mal à identifier les liens...
@formation-video
@formation-video 2 жыл бұрын
En résumé, et cela est fonctionnel dans 99 % des cas. - Si la classe B est une sorte de A, tu peux voir une relation d'héritage (B sera sous-classe de A) - Si la classe B est contenu dans A, tu peux voir une composition (la classe A aura un attribut du type de classe B) Pour illustrer le tout : pastebin.com/GJhFMV5M
@nicolascappeliez2651
@nicolascappeliez2651 2 жыл бұрын
@@formation-video merci beaucoup! Je vais lire ton lien. Dur de se remettre à la programmation après tant d'année, mais je retrouve les plaisirs de l'époque surtout quand on obtient quelque chose de fonctionnel.
@formation-video
@formation-video 2 жыл бұрын
Bon courage 😉
@praxisetpsyche1717
@praxisetpsyche1717 Жыл бұрын
Bonjour Jason, Un grand merci pour cette vidéo de qualité sur une notion essentielle en POO. J’ai toutefois une petite question. Soient deux classes B et C qui héritent de A. Certaines méthodes de A sont virtuelles pures, elles ont donc obligatoirement été implémentées dans B et C. Mais imagine le cas où je ne souhaite implémenter une méthode que dans C. Sachant que je ne manipule que des pointeurs d’instances de A dans mon conteneur (je souhaite profiter du polymorphisme), comment je dois opérer dans ce cas ? Parce que je devrai aussi implémenter cette méthode dans B, si je déclare cette méthode virtuelle pure, chose que je ne veux pas… Est-ce que l’utilisation d’une interface pour la classe C ferait l’affaire ? La question ne se poserait pas si je manipule des pointeurs de C dans mon conteneur, dans ce cas j’imagine qu’implémenter la méthode dans C suffirait… Merci !
@formation-video
@formation-video Жыл бұрын
Bonjour, dans ce cas, j'irais définir une interface pour que le contrat n'existe qu'avec la classe C où je veux implémenter la méthode, sans devoir le faire pour la classe B 👍
@lynykak8681
@lynykak8681 Жыл бұрын
la version c++2a ne veut pas 'override' lors de l'implementation ainsi que l'inclusion dans main si elle est virtualisée mon constat quand j'ai effectuer cela je n'ai plus eu d'erreur à la compilation
@_DemoniaK_3D
@_DemoniaK_3D 6 ай бұрын
Salut, merci beaucoup pour ces vidéo de qualités comme d'habitude ! :) Une petite question, à 6.55 tu expliques que l'implémentation de la méthode virtuel peut être autorisé, mais n'est t'elle pas simplement obligatoire en c++? J'ai tester de mon coté sans implémentation et j'ai une erreur : "undefined reference to : vtable for ...." édit : Cela marche avec une méthode virtuel pure mais pas simplement virtuel, je crois que c'est la où est la différence :)
@formation-video
@formation-video 6 ай бұрын
Bonjour, oui si on ne veut pas implémenter la méthode virtuelle, il faudra la rendre pure, ce qui rendra la classe abstraite. Sinon, sans cela, le compilateur ne peut pas créer la table des fonctions virtuelles "vtable", d'où l'erreur qu'il produit 👍
@F_a_s_s_i_l_a
@F_a_s_s_i_l_a 9 ай бұрын
Merci pour le contenu . Cependant j'avais une question par rapport à la classe abstraite et la méthode pur. Prenons l'exemple ou j'utilise une méthode de ma classe de base qui sera définit de la même manière dans mes autres classe mais avec une augmentation. Je vais utiliser alors la notion de virtuel dans ce cas si je comprends bien . Mais pourrais je carrément rendre la classe abstraite vu que je sais également que je n'ai pas besoin d'objet de cette classe de base ? Et également définir une classe abstraite reviendrais donc à ne plus la définir dans la classe de base mais avoir l'obligation de définir dans les autres classes dérivées? Alors que pour la méthode virtuel , ce n'ai pas le cas? Merci
@formation-video
@formation-video 9 ай бұрын
Oui, si ta classe de base n'est pas amenée à être instanciée, tu peux en faire une classe abstraite.
@F_a_s_s_i_l_a
@F_a_s_s_i_l_a 9 ай бұрын
Mais si je veux rendre une méthode virtual mais que cependant , je sais que dans les classes dévirées , je vais faire une augmentation(utiliser la méthode virtuel de la classe de base et rajouter des elmements en fonctions de mes classes dérivées) . La méthode est toujours virtual mais est ce que le override fonctionne toujours?@@formation-video
@formation-video
@formation-video 9 ай бұрын
Le mieux est que tu testes pour voir si cela confirme ou non tes doutes 😉
@davidlafarce121
@davidlafarce121 10 ай бұрын
Normal que je doit mettre un {} lors de la définiton de ma methdode virtuelle pour que ça fonctionne ?
@formation-video
@formation-video 10 ай бұрын
Non, pas normal, tu n'aurais pas oublié le point-virgule à la fin ?
@davidlafarce121
@davidlafarce121 10 ай бұрын
​@@formation-video non mais lorsque je déclare la méthode virtuel null (égal à zéro) et que je surpimme les {} ça marche aussi je me dit que peut être on doit explicitement dire que la méthode est nulle donc pas d'implémentation nécessaire.et l'erreur que j'ai lorsque je retire les accolade et que je ne met pas la méthode virtuel à nulle c'est: undefined reference to'vtable for transport' transport étant le nom du fichier et de la classe.
@formation-video
@formation-video 10 ай бұрын
Si ta méthode n'a pas d'implémentation et est virtuelle, tu peux la faire suivre d'un "= default" (avant le point-virgule). Cela indiquera au compilateur de générer une implémentation par défaut de la méthode. Sinon oui, la rendre pure (= 0) est aussi une alternative 👍
@iblamefafa6478
@iblamefafa6478 Жыл бұрын
pouvez vous me conseiller une platforme d exercice pour que je puisse y pratiquer ce language merci d'avance t un sauveuur
@formation-video
@formation-video Жыл бұрын
Sur n'importe quel moteur de rercherche : "exercices corrigés C++"
@lynykak8681
@lynykak8681 Жыл бұрын
c'est quoi donc la difference entre public et protected si deja les deux laisses l'acces??
@formation-video
@formation-video Жыл бұрын
Les deux ne laissent pas d'accès de la même manière. Quand c'est défini comme "protected", c'est accessible pour la classe elle-même (comme "private") et ses classes descendantes. Et quand c'est défini "public", c'est...publique, accessible pour tout.
@lyesbelhoul3356
@lyesbelhoul3356 Жыл бұрын
Merci !
@formation-video
@formation-video Жыл бұрын
🙏
@jaipasdidee9256
@jaipasdidee9256 10 ай бұрын
Salut, comment se fait-il que tu puisses utiliser des classes sans utiliser de constructeur ? Tes classes English et Indonesian n'utilise pas de constructeur donc j'ai fait pareil de mon côté mais j'ai des erreurs à la compilation
@formation-video
@formation-video 10 ай бұрын
Bonjour, le compilateur va lui-même créer des constructeurs par défaut s'ils ne sont pas définis. En revanche, tu ne peux pas omettre le constructeur par défaut si ta classe a d'autres constructeurs définis. Le mieux si tu n'as pas écrit de constructeur par défaut est de le définir et ajouter un "default" à la fin : pastebin.com/739JLh7F
@nytrox1290
@nytrox1290 2 жыл бұрын
Petite question, pourquoi pouvons nous passer directement dans le constructeur une chaine de charactères à la volée par référence si dans le constructeurs l'argument est marqué "const" alors que s'il ne l'est pas, on ne peut pas passer directement de chaine par référence ? Ex: void fonc(std::string& s) {} fonc("string") ->fonctionne pas void fonc(const std::string& s) {} fonc("string") ->fonctionne
@formation-video
@formation-video 2 жыл бұрын
Cela vient de ce que j'ai expliqué sur la chaîne de caractères, déjà au début du cours. Ta chaîne par défaut est traitée comme étant du type char* (hérité du C). De ce fait, dans le premier cas, tu ne peux que passer une donnée de type std::string et non une chaîne littérale (il faut alors déclarer s au préalable) : pastebin.com/ewLCNAaz Dans le second cas, puisque l'on attend une chaîne constante, elle accepte alors std::string ou une chaîne littérale sans soucis.
@ahappypapabear
@ahappypapabear Жыл бұрын
Merci, j'avais du mal à comprendre la différence entre classe abstraite et interface. :) J'aime bien tes vidéos, tu as penser à faire des cours sur Udemy ? C'est pas mal comme plateforme.
@formation-video
@formation-video Жыл бұрын
Non puisque je publie des cours sur KZbin, mais j'ai prévu de faire des projets (payants), sur une plateforme tierce (pas encore choisie)
@ibnouharirbenharir2089
@ibnouharirbenharir2089 2 жыл бұрын
Bonsoir ! S'il vous plaît une question hors sujet j'aimerais savoir le 🔗 liens qui me dirige vers la formation hacking
@formation-video
@formation-video 2 жыл бұрын
Bonsoir : jasonchampagne.fr/faq-youtube
@ibnouharirbenharir2089
@ibnouharirbenharir2089 2 жыл бұрын
@@formation-video merci!
@patriciafokoua6655
@patriciafokoua6655 2 жыл бұрын
Bonjour et merci pour le cours. Pourquoi déclarer string& name au lieu de string name
@formation-video
@formation-video 2 жыл бұрын
Bonjour, cela a été expliqué plus tôt dans le cours, concernant le passage de données par référence. Logiquement, si tu en es à cette séance 20, tu as forcément vu les vidéos précédentes, dont celle qui aborde le sujet en détails 😉
@patriciafokoua6655
@patriciafokoua6655 2 жыл бұрын
@@formation-video Je vais revenir sur les cours précédents, merci
@formation-video
@formation-video 2 жыл бұрын
Bon courage 👋
@VENOM-ut8rt
@VENOM-ut8rt Жыл бұрын
N'est-il pas une bonne idée de mettre toutes les classes d'un même parents dans un même fichier d'en-tête ?
@formation-video
@formation-video Жыл бұрын
Ce n'est pas interdit, mais il est plutôt recommandé de garder une classe par fichier (certains langages l'imposent d'ailleurs). Bien sûr, il peut y avoir des exceptions, comme une classe utilisée uniquement avec une autre, auquel cas cela ne serait pas déconnant de les regrouper ensemble. Bref, à toi de voir 👍
@lalmaslamine8710
@lalmaslamine8710 2 жыл бұрын
Bonjour j'ai toujours cette erreur : ..\src\fille.h:16:14: error: 'void fille::setNombre(int, int)' marked 'override', but does not override pourtant j'ai fais un code simple d'une classe qui hérite d'une autre et j'essaye de redéfinir une méthode dans la classe fille, une solution ? class mere { public : mere (); virtual void setNombre(int n); protected : int nombre; }; void mere::setNombre(int n) { this->nombre=n; cout
@formation-video
@formation-video 2 жыл бұрын
Bonjour, la méthode redéfinie doit avoir la même signature que la méthode de base. La signature de base : setNombre(int n) La signature de la redéfinition : setNombre(int n, int m) Voilà où est le problème (car elles doivent être identiques).
@adrienc8716
@adrienc8716 7 ай бұрын
ça veut dire quoi la phrase : Someone() = delete Je croyais que le mot delete était utilisé que pour supprimer de la heap un pointeur et que ça n'avait rien à voir avec le constructeur par défaut de la classe. Merci bcp :)
@formation-video
@formation-video 7 ай бұрын
Comme expliqué dans la vidéo, cela indique au compilateur que le constructeur par défaut de la classe Someone ne doit pas être utilisé 👍
@lynykak8681
@lynykak8681 Жыл бұрын
je suis fatigué avec ce compilateur !! redefinition of class alors que je n'ai même pas touché au code de la classe en cquestion
@formation-video
@formation-video Жыл бұрын
Il faudrait voir ton code
@philtoa334
@philtoa334 2 жыл бұрын
: )
C++ #21 - tableaux
35:54
FormationVidéo
Рет қаралды 12 М.
you will never ask about pointers again after watching this video
8:03
人是不能做到吗?#火影忍者 #家人  #佐助
00:20
火影忍者一家
Рет қаралды 20 МЛН
Cat mode and a glass of water #family #humor #fun
00:22
Kotiki_Z
Рет қаралды 42 МЛН
We Attempted The Impossible 😱
00:54
Topper Guild
Рет қаралды 56 МЛН
1% vs 100% #beatbox #tiktok
01:10
BeatboxJCOP
Рет қаралды 67 МЛН
Python Lesson 1 Introduction بايثون بالعربي
2:51
Gammal Tech
Рет қаралды 1 М.
Programmation C++ : POO - L'héritage
1:03:15
Algomius
Рет қаралды 866
C++ #19 - héritage
33:53
FormationVidéo
Рет қаралды 14 М.
Threads in C++
11:35
The Cherno
Рет қаралды 372 М.
C++ #22 - chaînes de caractères
23:54
FormationVidéo
Рет қаралды 8 М.
Premature Optimization
12:39
CodeAesthetic
Рет қаралды 848 М.
Track MEMORY ALLOCATIONS the Easy Way in C++
13:25
The Cherno
Рет қаралды 167 М.
人是不能做到吗?#火影忍者 #家人  #佐助
00:20
火影忍者一家
Рет қаралды 20 МЛН