[ Web Proxy ]
URL:
Viewing: https://fr.cppreference.com/cpp/language/virtual [Back]  [Original]

virtual function specifier cppreference.com
cppreference.com
Espaces de noms
Variantes

virtual function specifier

De cppreference.com

<metanoindex/>

 
 
Langage C++
Sujets gnraux
Contrle de flux
Instructions conditionnelles
Instructions d'itration
Instructions de saut
Fonctions
dclaration de fonction
expression lambda
fonction gnrique
spcificateur inline
spcification d'exception (obsolte)
spcificateur noexcept (C++11)
Exceptions
Espaces de noms
Types
spcificateur decltype (C++11)
Qualificatifs
qualificatifs const et volatile
qualificatifs de stockage
qualificatif constexpr (C++11)
qualificatif auto (C++11)
qualificatif alignas (C++11)
Initialisation
Littraux
Expressions
oprateurs alternatifs
Utilitaires
Types
dclaration typedef
dclaration d'alias de type (C++11)
attributs (C++11)
Jette
Original:
Casts
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
conversions implicites
conversion const_cast
conversion static_cast
conversion dynamic_cast
conversion reinterpret_cast
conversions style C et style fonction
Allocation de mmoire
Classes
Qualificatifs spcifiques aux membres de classe
Fonctions membres spciales
Modles
classes gnriques
fonctions gnriques
spcialisation de modles
paquets de paramtres (C++11)
Divers
Assembleur
 
Indique qu'une fonction est virtuelle
Original:
Specifies that a function is virtual
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Syntaxe

virtual function_declaration ;

Explication

Fonctions virtuelles sont des fonctions membres dont le comportement peut tre redfinie dans les classes drives. Par opposition aux fonctions non virtuelles, le comportement substitue est conserve, mme s'il n'y a pas d'information lors de la compilation sur le type rel de la classe. Cela signifie que, mme si une classe drive est gre en utilisant pointeur ou une rfrence la classe de base, un appel une fonction virtuelle surcharge invoquerait le comportement dfini dans la classe drive .
Original:
Virtual functions are member functions whose behavior can be overridden in derived classes. As opposed to non-virtual functions, the overridden behavior is preserved even if there is no compile-time information about the actual type of the class. That means, even if a derived class is handled using pointer or reference to the base class, a call to a overridden virtual function would invoke the behavior defined in the derived class.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
La signature de la fonction doit tre la mme pour tre remplace.
Original:
The function signature must be the same in order to be overridden.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Le type de retour d'une fonction primordiale virtuel ne doit pas ncessairement tre identique celle de la fonction surcharge. Les types peuvent tre diffrents s'ils sont' covariante les uns avec les autres. Deux types sont covariants s'ils satisfont aux exigences suivantes:
Original:
The return type of a overriding virtual function doesn't necessarily need to be the identical to that of the overridden function. The types can be different if they are covariant with each another. Two types are covariant if they satisfy the following requirements:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Nous nous rfrons ici la fonction primordiale que Derived::f() et la fonction surcharge comme Base::f()
Original:
Here we refer to the overriding function as Derived::f() and to the overridden function as Base::f()
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
  • les deux types sont des pointeurs ou des rfrences des classes. Multi-niveaux pointeurs ou des rfrences ne sont pas autoriss .
    Original:
    both types are pointers or references to classes. Multi-level pointers or references are not allowed.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • la classe du type de retour de Base::f() doit tre une classe de base clair et accessible directement ou indirectement de la classe du type de retour de Derived::f() .
    Original:
    the class of the return type of Base::f() must be a unambiguous and accessible direct or indirect base class of the class of the return type of Derived::f().
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • le type de retour de Derived::f() doit tre gale ou cv-qualifi moins que le type de retour de Base::f() .
    Original:
    the return type of Derived::f() must be equally or less cv-qualifi than the return type of Base::f().
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
Si une fonction virtuelle est appele directement, c'est--qualification explicitement la classe, il est membre de l', alors le mcanisme d'appel virtuel est supprime et que la mise en oeuvre particulire est appel .
Original:
If a virtual function is called directly, that is, explicitly qualifying the class it is a member of, then the virtual call mechanism is suppressed and that particular implementation is called.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Un destructeur virtuel d'une classe de base est toujours remplace par un destructeur d'une classe drive, mme si par ailleurs que les destructeurs sont pas hrites .
Original:
A virtual destructor of a base class is always overridden by a destructor of a derived class, even though that destructors are otherwise not inherited.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Les rgles d'accs une fonction virtuelle sont dtermines par la premire dclaration. Les rgles d'accs dfinies par les dclarations des fonctions primordiales s'appliquent uniquement aux appels de fonctions directes .
Original:
The access rules to a virtual function are determined by the first declaration. Access rules defined by the declarations of the overriding functions apply only to the direct function calls.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
virtual fonction spcificateur implique l'adhsion, ainsi que des fonctions membres peuvent tre virtuelles. En outre, depuis une instance d'une classe est ncessaire pour appeler une fonction virtuelle, fonction virtuelle ne peut pas tre static .
Original:
virtual function specifier implies membership, thus only member functions can be virtual. Also, since an instance of a class is needed in order to call a virtual function, virtual function can not be static.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Modles de fonctions ne peut tre dclare virtual. Ceci s'applique seulement aux fonctions qui sont eux-mmes des modles - une fonction de membre rgulier d'un modle de classe peut tre dclare virtuelle .
Original:
Functions templates cannot be declared virtual. This applies only to functions that are themselves templates - a regular member function of a class template can be declared virtual.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Exemple

class Parent {
public:
    void functionA();
    virtual void functionB();   //Note the keyword virtual
    void functionC();
};
 
class Child : public Parent {
public:
    void functionA();
    virtual void functionB();   //Note the keyword virtual
};
 
int main()
{
    Parent* p1 = new Parent;
    Parent* p2 = new Child;
    Child* c = new Child;
 
    p1->functionA();   //Calls Parent::functionA
    p1->functionB();   //Calls Parent::functionB
    p1->functionC();   //Calls Parent::functionC
   
    p2->functionA();   //Calls Parent::functionA because p2 points to a Parent
    p2->functionB();   //Calls Child::functionB even though p2 points 
                       // to a Parent because functionB is virtual
    p2->functionC();   //Calls Parent::functionC
 
    c->functionA();   //Calls Child::functionA
    c->functionB();   //Calls Child::functionB
    c->functionC();   //Calls Parent::functionC
 
    return 0;
}


Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page