On n'a pas besoin de la notion d'objet pour mettre des apis autour des données... par contre, pour faire l'héritage, c'est essentiel.
Le C# n'a pas du tout le même genre de mécanisme que le C++: autant il est naturel que l'héritier précise explicitement qu'il est en train de redéfinir une méthode (après tout, on est en train de parler d'héritage, donc on fait le tri entre ce qu'on garde et ce qu'on change!) ; autant pour le C++, c'est le parent qui doit dire au compilo que ça peut se produire!
Enfin, je n'ai pas doublement faux, comme l'exemple suivant le montre:
* une classe A a une méthode 'toto' qui affiche "Hello world!";
* une fonction 'affiche' qui traîne quelque part reçoit un objet de type A et appelle sa méthode toto;
* on veut un objet de type A mais qui affiche en français "Salut tout le monde!" avec sa méthode 'toto' ; facile, on hérite et on redéfinit!
Avec un vrai langage à objets, ceci marche sans problème et sans surprise. Avec le C++, par contre, non (et sans message d'avertissement du compilateur). Pourquoi? Tout simplement parce que la classe A n'a pas déclaré/défini sa méthode 'toto' comme étant 'virtual', ie: si la classe parente ne dit pas qu'elle peut être héritée, elle ne l'est pas correctement. Ma conclusion est donc: 1) il faut le dire explicitement; 2) c'est avec 'virtual' qu'on le dit.
Je réaffirme donc mon propos: certes on peut faire de l'objet avec le C++, mais ça ne lui est pas naturel!
[^] # Re: Langage objet...
Posté par Snark_Boojum . En réponse à la dépêche Les nouveautés de Qt 4. Évalué à 1.
Le C# n'a pas du tout le même genre de mécanisme que le C++: autant il est naturel que l'héritier précise explicitement qu'il est en train de redéfinir une méthode (après tout, on est en train de parler d'héritage, donc on fait le tri entre ce qu'on garde et ce qu'on change!) ; autant pour le C++, c'est le parent qui doit dire au compilo que ça peut se produire!
Enfin, je n'ai pas doublement faux, comme l'exemple suivant le montre:
* une classe A a une méthode 'toto' qui affiche "Hello world!";
* une fonction 'affiche' qui traîne quelque part reçoit un objet de type A et appelle sa méthode toto;
* on veut un objet de type A mais qui affiche en français "Salut tout le monde!" avec sa méthode 'toto' ; facile, on hérite et on redéfinit!
Avec un vrai langage à objets, ceci marche sans problème et sans surprise. Avec le C++, par contre, non (et sans message d'avertissement du compilateur). Pourquoi? Tout simplement parce que la classe A n'a pas déclaré/défini sa méthode 'toto' comme étant 'virtual', ie: si la classe parente ne dit pas qu'elle peut être héritée, elle ne l'est pas correctement. Ma conclusion est donc: 1) il faut le dire explicitement; 2) c'est avec 'virtual' qu'on le dit.
Je réaffirme donc mon propos: certes on peut faire de l'objet avec le C++, mais ça ne lui est pas naturel!
Snark