Maison >développement back-end >C++ >Similitudes et différences entre les fonctions en ligne C++ et les fonctions virtuelles

Similitudes et différences entre les fonctions en ligne C++ et les fonctions virtuelles

王林
王林original
2024-04-17 09:39:01886parcourir

Les fonctions en ligne intègrent le corps de la fonction dans le point d'appel, améliorant ainsi les performances et le volume du code, mais ont une lisibilité inférieure ; les fonctions virtuelles appellent des fonctions remplacées par des sous-classes via le polymorphisme, améliorant ainsi la flexibilité, mais ont une surcharge d'exécution plus élevée.

C++ 内联函数与虚拟函数的异同

Similarités et différences entre les fonctions en ligne et les fonctions virtuelles en C++

Fonctions en ligne

Les fonctions en ligne sont des fonctions dans lesquelles le compilateur intègre le corps de la fonction dans le point d'appel lorsqu'il est appelé, au lieu d'exécuter la fonction appelant processus.

Avantages :

  • Améliorez les performances : évitez d'appeler en surcharge.
  • Réduire la taille du code : le corps de la fonction n'apparaîtra pas de manière répétée dans plusieurs points d'appel.

Inconvénients :

  • Temps de compilation accru : le corps de la fonction doit être compilé pour chaque point d'appel.
  • Lisibilité réduite du code : les corps de fonctions sont dispersés dans la base de code.

Syntaxe :

inline int sum(int a, int b) {
  return a + b;
}

Fonction virtuelle

Les fonctions virtuelles sont des fonctions qui atteignent le polymorphisme grâce au mécanisme d'héritage. Lorsqu'une fonction virtuelle sur un objet de classe parent est appelée, la fonction réelle appelée est déterminée par le type dynamique de l'objet.

Avantages :

  • Réaliser le polymorphisme : les sous-classes peuvent remplacer les fonctions virtuelles des classes parentes.
  • Améliorez l’évolutivité et la flexibilité du code.

Inconvénients :

  • Surcharge d'exécution : nécessité de maintenir une table de fonctions virtuelles et des appels indirects.
  • Complexité accrue du code : nécessité d'utiliser le mot-clé virtualoverride.

Grammaire :

class Base {
 public:
  virtual void print() {
    std::cout << "Base" << std::endl;
  }
};

class Derived : public Base {
 public:
  virtual void print() override {
    std::cout << "Derived" << std::endl;
  }
};

Comparaison des similitudes et des différences :

Caractéristiques Fonctions en ligne Fonctions virtuelles
Mécanisme d'appel Intégration du corps de fonction appel indirect
Performance Plus élevé Inférieur
Taille du code Plus petit Plus grand
Lisibilité Plus faible Plus élevé
Polymorphisme Non pris en charge Support

Cas pratiques :

Vous pouvez utiliser des fonctions en ligne pour implémenter des opérations mathématiques simples, telles que la sommation :

inline int sum(int a, int b) {
  return a + b;
}

int main() {
  std::cout << sum(1, 2) << std::endl;  // 输出:3
}

Vous pouvez utiliser des fonctions virtuelles pour implémenter des interfaces de dessin graphique :

class Shape {
 public:
  virtual void draw() = 0;
};

class Circle : public Shape {
 public:
  virtual void draw() override {
    std::cout << "Drawing a circle" << std::endl;
  }
};

int main() {
  Shape* shape = new Circle();
  shape->draw(); // 输出:Drawing a circle
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn