Accueil Finances personnelles Abstract Classes et C ++ - dummies

Abstract Classes et C ++ - dummies

Vidéo: Virtual Functions & Abstract Classes in C++ | C++ Programming Tutorials 2025

Vidéo: Virtual Functions & Abstract Classes in C++ | C++ Programming Tutorials 2025
Anonim

C ++ prend en charge late binding , qui résout un appel de méthode basé sur l'exécution type (ou type dynamique) de l'objet cible plutôt que son type déclaré (ou type statique). Cela est illustré dans l'extrait de code C ++ suivant:

#include using namespace std; class Oven {public: cuisinier vide virtuel () {cout << "cuisiner avec un four" << endl;}}; classe MicrowaveOven: four public {public: cuisinier vide virtuel () {cout << "cuisinant avec un four à micro-ondes" << endl;}}; void prepareMeal (four et four) {four. cook ();

Dans la fonction prepareMeal (), l'appel au four. cook () peut passer à Oven:: cook () ou MicrowaveOven:: cook () en fonction du type d'exécution (le type "actuel") de l'objet du four passé.

Le mot clé virtuel est critique ici. Sans elle, la méthode cook () serait liée tôt, en fonction du type de compilation, et invoquerait Oven:: cook () à chaque fois. Une fois déclarée virtuelle dans la classe Oven, la méthode est supposée être virtuelle dans chaque sous-classe, mais cela ne fait pas de mal de répéter la déclaration pour que les lecteurs comprennent.

Le programme simple suivant démontre ce principe dans la pratique:

int main () {Four du four; prepareMeal (four); MicrowaveOven mo; prepareMeal (mo); return 0;}

Dans ce programme, l'appel à cook () génère deux sorties différentes selon le type de four:

Cuisiner avec un four Cuisiner avec un four micro-ondes

Ce n'est pas toujours le cas, qu'une méthode de la classe de base peut être définie. Considérez le cas du four plus attentivement. Il existe différents types de fours - fours conventionnels, fours à convection et fours à micro-ondes - mais on pourrait soutenir qu'il n'y a pas de four qui n'appartienne pas à l'une de ces sous-classes. Vous pourriez être en mesure de dire comment les différents types de fours effectuent l'opération de cuisson - c'est-à-dire, ce que peut faire un conventionnelOven:: cook () et un micro-microwaveOven:: cook (). Il n'est probablement pas possible de définir les actions que Oven:: cook () doit effectuer.

Vous ne pouvez pas simplement quitter Oven:: cook () non déclaré dans un langage fortement typé comme C ++. Cependant, vous pouvez déclarer une méthode mais laissez unimplemented si aucune implémentation n'existe. On utilise la curieuse syntaxe suivante pour le faire:

class Oven {public: virtual void cook () = 0;};

Ce code déclare une méthode Oven:: cook () qui est lié en retard mais n'implémente pas la méthode. En fait, il va plus loin en disant que la méthode ne sera pas mise en œuvre. En C ++, une telle méthode est dite virtuelle pure . Les programmeurs C ++ utilisent également le terme préféré dans de nombreux autres langages informatiques fortement typés: abstract .La classe Oven est dite abstraite.

Un résumé représente une propriété que vous connaissez, mais que vous ne savez pas comment implémenter sans ambiguïté dans la classe en cours.

Une classe est abstraite si elle contient une ou plusieurs méthodes virtuelles pures. La signification de ceci est que vous ne pouvez pas instancier une classe abstraite. Ainsi, ce qui suit n'est plus autorisé:

int main () {Four du four; prepareMeal (four); return 0;}

La raison en est très simple: si vous avez créé un objet de classe Oven et que vous avez essayé d'invoquer oven. cook (), que devrait faire le compilateur?

À un niveau plus philosophique, il est bon de dire qu'il existe un terme commun appelé Four qui décrit les fours conventionnels, les fours à micro-ondes et les fours à convection. Ce terme est un concept habituel car il lie les similitudes dans toutes ces sous-classes. Mais il n'y a pas d'exemple de four qui ne soit pas l'une des sous-classes de Four.

Une sous-classe d'une classe abstraite est elle-même abstraite jusqu'à ce que toutes les méthodes virtuelles pures aient été remplacées par des versions non abstraites (c'est-à-dire concrètes ). Ainsi, la classe MicrowaveOven de l'extrait de code précédent n'est pas abstraite - même si Oven était abstraite - car elle remplace cook () par sa propre version concrète.

Notez qu'il n'y a rien de mal avec la fonction prepareMeal () définie comme suit:

void prepareMeal (Four et four) {four. cook ();}

Même si l'argument est déclaré être un Four, il ne peut être invoqué qu'avec une sous-classe de Four, telle que MicrowaveOven ou ConventionalOven, pour laquelle cook () est défini.

Abstract Classes et C ++ - dummies

Le choix des éditeurs

Comprendre iOS Animation - les nuls

Comprendre iOS Animation - les nuls

Heureusement, la plupart de ce que vous devez faire en ce qui concerne l'animation iOS est déjà intégré dans le cadre. Certaines propriétés de la vue peuvent être animées (le point central, par exemple), ce qui signifie que vous n'avez qu'à indiquer à la vue où commencer et où finir, et quelques autres paramètres optionnels, ...

Utilisez le Navigateur de symboles dans Xcode - mannequins

Utilisez le Navigateur de symboles dans Xcode - mannequins

Le navigateur de symboles de xcode vous permet de parcourir les symboles votre projet - cliquez simplement sur le bouton Symbole dans la barre de sélection du navigateur. Notez que vous devez attendre que Xcode ait fini d'indexer votre projet avant de pouvoir utiliser cette fonctionnalité. Vous pouvez afficher les symboles dans une liste hiérarchique ou plate à l'aide des boutons ...

À L'aide de Design Patterns dans iOS App Development - dummies

À L'aide de Design Patterns dans iOS App Development - dummies

Pour le développement d'applications iOS, Le cadre est conçu autour de certains paradigmes de programmation, également appelés modèles de conception. Le motif de conception est un modèle auquel votre propre code doit correspondre. Le framework UIKit fait beaucoup de gros efforts pour vous. C'est très bien, mais travailler avec ça ...

Le choix des éditeurs

Big Data Streaming dans l'industrie de la santé - les nuls

Big Data Streaming dans l'industrie de la santé - les nuls

Sont importants pour l'industrie de la santé - y compris son utilisation dans tous les domaines, de la recherche génétique à l'imagerie médicale avancée, en passant par la recherche sur l'amélioration de la qualité des soins. Bien que l'analyse des données volumineuses dans chacun de ces domaines soit importante pour la poursuite de la recherche, un avantage majeur est l'application de cette information à la médecine clinique. ...

Big Data et Assurance - les nuls

Big Data et Assurance - les nuls

L'industrie de l'assurance ne pourrait pas survivre sans la capacité de collecter et traiter des quantités substantielles de données . Afin de déterminer les primes appropriées pour leurs polices, les compagnies d'assurance doivent être en mesure d'analyser les risques auxquels les assurés sont confrontés et être en mesure de déterminer la probabilité que ces risques se matérialisent effectivement. En raison d'augmentations substantielles ...

Big Data Streaming dans l'industrie de l'énergie - mannequins

Big Data Streaming dans l'industrie de l'énergie - mannequins

Réduisant la consommation d'énergie, trouvant de nouvelles sources d'énergie renouvelable, L'augmentation de l'efficacité énergétique est un objectif important pour la protection de l'environnement et le maintien de la croissance économique. De grands volumes de données en mouvement sont de plus en plus surveillés et analysés en temps réel pour aider à atteindre ces objectifs.

Le choix des éditeurs

Gérer le Social Media Commerce avec HootSuite - dummies

Gérer le Social Media Commerce avec HootSuite - dummies

HootSuite est un système de gestion de médias sociaux surveillance à travers les réseaux sociaux à partir d'un seul tableau de bord basé sur le Web. Pour les entreprises, HootSuite est le plus souvent utilisé par les équipes de médias sociaux avec plusieurs agents, mais de nombreux utilisateurs l'apprécient également. Lorsque vous êtes à la recherche d'une plate-forme robuste qui ...

Surveiller les commentaires des médias sociaux avec Google - les nuls

Surveiller les commentaires des médias sociaux avec Google - les nuls

Il n'y a pas un moyen infaillible d'attraper les médias sociaux mention de votre entreprise ou entreprise. Certains services de surveillance des médias sociaux trouvent quelques exemples, d'autres en trouvent plus, et encore un autre peut trouver quelque chose de différent. Mais de nombreux propriétaires d'entreprises ont trouvé des résultats complets assez insaisissables. Le bon côté de tout cela est ...

Rejoignez une plateforme de médias sociaux locale: MerchantCircle - dummies

Rejoignez une plateforme de médias sociaux locale: MerchantCircle - dummies

Comme votre chambre de commerce locale. Ils peuvent ne pas être aussi sociaux que face à face, mais vous pouvez établir de solides relations d'affaires et peut-être promouvoir les ventes. Être membre de votre chambre de commerce locale est la première étape à suivre pour promouvoir votre entreprise au niveau local. ...