j'aimerais savoir comment fonctionne (ou est traduit) du code haut niveau orienté objet (n'importe quel langage) en langage assembleur, ou autres langages plus bas niveau (comme du C par exemple).
J'imagine que le procédé doit être bien plus différent et complexe que pour de l'impératif par exemple, non ?
J'imagine que le procédé doit être bien plus différent et complexe que pour de l'impératif par exemple, non ?
Non, c'est exactement pareil. Il y a juste le polymorphisme à gérer, ce qui n'a rien de très compliqué : on ajoute une information de type pour les hiérarchies de classes et quand un appel de méthode apparaît, on ajoute un test qui regarde le type et appelle la méthode surchargée correspondante.
Donc, si je comprends bien, le code généré n'est rien de plus qu'un... assemblage, une structure de données (initialisée ou non en fonction des champs) ?
Pour expliciter le polymorphisme. Si j'ai un code comme :
class Base {
public:
virtual void bar(){
std::cout<<"Base::bar"<<std::endl;
}
};
class Derived : public Base {
public:
void bar() override {
std::cout<<"Derived::bar"<<std::endl;
}
};
void foo(Base& b){
b.bar();
}
Au runtime, lors d'un appel à "foo", si b est de type :
Base, ça affiche "Base::bar"
Devired, ça affiche "Derived::bar"
Donc il faut mettre le code qui va permettre de prendre cette décision au runtime. Soit par un test de type, soit en C++ par exemple en ayant un pointeur vers la table de fonction virtuelle qui va contenir le bon pointeur de fonction.
Merci beaucoup pour toutes tes explications, je passe le sujet en [résolu] !
Bonne fin de journée
Le doute est le commencement de la sagesse
Comment fonctionne l'orienté objet bas niveau
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C