1. Les méthodes statiques sont le type de méthode par défaut. Elles sont appelées comme les procédures et fonctions normales. Le compilateur connaît les adresses de ces méthodes, donc lorsqu'une méthode statique est appelée, elle peut lier statiquement les informations en cours d'exécution dans le fichier exécutable. , les méthodes statiques sont donc les plus rapides, mais elles ne peuvent pas être remplacées pour prendre en charge le polymorphisme.
2. Les méthodes virtuelles et les méthodes statiques sont appelées de la même manière. Étant donné que les méthodes virtuelles peuvent être remplacées, le compilateur ne connaît pas l'adresse d'une méthode virtuelle spécifiée lorsqu'elle est appelée dans le code. Par conséquent, le compilateur recherche l'adresse de la fonction au moment de l'exécution en créant une table de méthodes virtuelles (VMT). Toutes les méthodes virtuelles sont traitées via VMT au moment de l'exécution. En plus des méthodes virtuelles définies par elle-même, la table VMT d'un objet possède également toutes ses méthodes virtuelles. Par conséquent, les méthodes virtuelles utilisent plus de mémoire que les méthodes dynamiques, mais elles s'exécutent relativement rapidement.
3. Les méthodes dynamiques sont fondamentalement similaires aux méthodes virtuelles, sauf que leurs systèmes de hauteur sont différents. Le compilateur attribue un numéro unique à chaque méthode dynamique et utilise ce numéro et l'adresse de la méthode dynamique pour construire une table de méthodes dynamiques (DMT). Contrairement à la table VMT, il n'existe que des méthodes dynamiques déclarées dans la table DMT, et cette méthode nécessite que la table DMT ancêtre accède à d'autres méthodes dynamiques. Pour cette raison, les méthodes dynamiques utilisent moins de mémoire que les méthodes virtuelles, mais elles sont plus lentes à s'exécuter car elles peuvent devoir rechercher des méthodes dynamiques dans le DMT de l'objet.
4. L'OP utilise la substitution pour qu'une méthode affiche différents comportements dans différentes classes dérivées. Les méthodes qui peuvent être remplacées dans l'OP sont des méthodes marquées comme virtuelles ou dynamiques lorsqu'elles sont déclarées. Pour remplacer une méthode, utilisez override au lieu de virtual oudynamic dans la déclaration de classe dérivée. Après avoir utilisé override, le compilateur remplacera la méthode d'origine dans VMT par une nouvelle méthode, et la méthode d'origine existe toujours. Si vous utilisez override pour déclarer à nouveau une méthode statique, il s'agit d'un véritable remplacement, qui est entièrement couvert par la nouvelle méthode. . Remplacez la même méthode dans la classe ancêtre.