Soyez le premier à donner votre avis sur cette source.
Vue 10 317 fois - Téléchargée 601 fois
#include <iostream> class A { public: A() { std::cout << "Construction A" << std::endl; } virtual ~A() { std::cout << "Destruction A" << std::endl; } virtual void QuiSuisJe() { std::cout << "Je suis A" << std::endl; } void QuiSuisJeNonVirtuel() { std::cout << "Je suis A" << std::endl; } }; class B:public A { public: B() { std::cout << "Construction B" << std::endl; } ~B() { std::cout << "Destruction B" << std::endl; } virtual void QuiSuisJe() { std::cout << "Je suis B" << std::endl; } void QuiSuisJeNonVirtuel() { std::cout << "Je suis B" << std::endl; } }; int main() { A * a_B = new B(); // construction de A et B mais attribution du pointeur à un objet de type A a_B->QuiSuisJe(); // affiche "Je suis B" a_B->QuiSuisJeNonVirtuel(); // affiche "Je suis A" : la fonction de la classe de base est appelée B * b = new B(); // construction de A et B et attribution du pointeur à un objet de type B b->QuiSuisJe(); // affiche "Je suis B" b->QuiSuisJeNonVirtuel(); // affiche "Je suis B" delete a_B; delete b; return 0; }
Quant à la valeur de wikipedia, c'est Off Topic, mais je te renvoie pour ton info personnelle à l'article intéressant http://fr.wikipedia.org/wiki/Wikipedia#Encyclop.C3.A6dia_Britannica_et_Wikip.C3.A9dia .
De plus si Wikipédia est une source très interressante il ne s'agit surtout pas d'un référentiel académique. Il contient beaucoup d'erreur et en l'occurence ici un grosse imprécision.
Donc question terminologie le terme de fonction est tout simplement "FAUX".
Extrait de wikipedia :
Méthode : "En programmation orientée objet, la méthode est une fonction faisant partie de l'interface d'un objet."
Fonction : "En informatique, une fonction est un ensemble d'instructions réalisant une certaine tâche."
Donc question terminologie, tout va bien, même si j'aurais pu être plus précis.
Tu peux exécuter le code suivant pour que ça te paraisse plus clair :
std::list<Transport*> transports;
Voiture* clio=new Voiture();
Train* corail4598=new Train();
transports.push_back(corail4598);
transports.push_back(clio);
for(std::list<Transport*>::const_iterator t=transports.begin();t!=transports.end();t++) {
(*t)->CalculerTempsParcours();
}
avec les classes qui vont avec :
class Transport {
public:
Transport() {}
virtual int CalculerTempsParcours()=0;
};
class Voiture:public Transport {
public:
Voiture() {}
virtual int CalculerTempsParcours() {std::cout << "CalculerTempsParcours de voiture" << std::endl; return 45;}
};
class Train:public Transport {
public:
Train() {}
virtual int CalculerTempsParcours() {std::cout << "CalculerTempsParcours de train" << std::endl; return 15;}
};
Côté inconvénient, je crois qu'il s'agit d'une question de performance. Tu auras des pertes de performance en utilisant le mot clé 'virtual'. Donc si tu n'en as pas besoin, il faut veiller à ne pas l'utiliser...
La moindre des choses pour y comprendre quelque chose en informatique est d'utiliser la bonne terminologie!
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.