Maison > développement back-end > C++ > le corps du texte

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

王林
Libérer: 2024-04-17 09:39:01
original
876 Les gens l'ont consulté

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;
}
Copier après la connexion

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;
  }
};
Copier après la connexion

Comparaison des similitudes et des différences :

CaractéristiquesFonctions en ligneFonctions virtuelles
Mécanisme d'appel Intégration du corps de fonctionappel indirect
PerformancePlus élevéInférieur
Taille du codePlus petitPlus grand
LisibilitéPlus faiblePlus é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
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal