En décrivant une classe, comment savoir quand la fonction doit être virtuelle? P>
Je sais quelle fonction virtuelle signifie, mais je ne peux tout simplement pas comprendre quand je devrais les faire virtuel p>
merci p>
7 Réponses :
Si votre classe va avoir des fonctions virtuelles dépend de la question de savoir si la classe va être utilisée comme classe de base, qui devrait dépendre de la conception et de l'architecture. P>
Les fonctions doivent être virtuelles si vous souhaitez les appeler polymorphiquement . En d'autres termes, le comportement rapide de la fonction virtuelle peut être personnalisé dans des sous-classes. Par exemple, envisagez la classe suivante: chaque voiture a un une directive importante pour faire une fonction virtuelle, et quand non, est Donné par le interface non virtuelle idiom. P> p> ID code>, et il n'y a pas de personnalisation autorisée ici, il n'ya donc aucun point dans la fabrication virtuelle. Les sous-classes ne doivent pas être en mesure de modifier cette propriété. Comment le moteur est commencé cependant, dépend de la voiture spécifique et peut en fait ne pas être définie dans le monde entier. Mais nous savons que chaque voiture doit démarrer le moteur avant que nous puissions conduire, nous le définissons donc comme une fonction virtuelle pure. P>
Je vous remercie. Dans cet exemple, nous devons hériter de la classe à cause de la fonction virtuelle pure. Mais si nous faisons "VOID Startengine () {};" ça devrait marcher quand même, non?
Lorsque vous souhaitez que votre classe soit traitée comme classe de base d'une autre classe et que vous pensez qu'il existe certaines fonctions dans votre classe que les classes dérivées pourraient remplacer, alors c'est une bonne indication que vous devriez faire ces fonctions En bref, dans la conception de la classe basée sur l'interface, il convient de créer des fonctions virtuel code>. Les faire
virtuel code> active le polymorphisme d'exécution! Cela signifie que vous pouvez utiliser les classes polymorphiquement, c'est-à-dire à l'aide de pointeur / référence de la classe de base de type, mais pointant vers un objet de classe dérivé! P>
virtuel code>. p>
virtuel code> lors de la conception de classes polymorphes! P>
en termes de conception de logiciels, si vous essayez de définir et de définir une classe ou une interface abstraite, vous utiliserez un mot-clé virtuel pour appliquer le polymorphisme dynamique. P>
Cela dépend de la possibilité que les classes dérivées puissent avoir une fonctionnalité différente pour la fonction membre présente dans la classe de base. Prenant la conception d'un class Square : public Polygon
{
public:
float area()
{
// area = side*side;
}
};
@Vextor - pourquoi pensez-vous. Et si le type d'opérande statique est différent de son type dynamique? polygone * obj = nouveau carré; code>
Vous devez faire la méthode virtuelle lorsque vous savez que le comportement de la méthode peut ou va changer dans les classes héritantes de cette classe. Plus précisément, si vous voulez une sous-classe écraser cette méthode, faites-la virtuelle. Si vous ne souhaitez pas mettre en œuvre cette méthode dans votre classe de base, faites-la en faire pure virtuelle: IE:
virtual void f() = 0;
Vous devez effectuer des fonctions virtuelles si vous souhaitez utiliser vos objets via un pointeur ou une référence à une classe de base. Vous pouvez ensuite appeler la fonction de classe dérivée, sans savoir exactement quel type il est. P>
Si vous utilisez chaque classe séparément et connais le type de chaque objet, vous n'avez pas besoin de fonctions virtuelles, même si vous utilisez des classes dérivées. P>
Si vous pensez au mot clé code> virtuel code> dans votre classe, commencez par ce destructeur doit être virtuel.
@Kirill v. Lyadvinsky, pas toujours: blogs.msdn .Com / B / OldNewthing / Archive / 2004/05/07 / 127826.aspx :)
L'article ne dit rien contre ma déclaration.