virtual function specifier
De cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
Especifica que una función es virtual
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.
You can help to correct and verify the translation. Click here for instructions.
Contenido |
[editar] Sintaxis
virtual function_declaration ;
|
|||||||||
[editar] Explicación
Funciones virtuales son funciones miembro cuyo comportamiento se puede reemplazar en las clases derivadas. A diferencia de las funciones no virtuales, el comportamiento se reemplaza se conserva incluso si no hay ninguna información de tiempo de compilación sobre el tipo real de la clase. Eso significa que, incluso si una clase derivada se maneja mediante puntero o una referencia a la clase base, una llamada a una función virtual reemplaza invocaría el comportamiento definido en la clase derivada .
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.
You can help to correct and verify the translation. Click here for instructions.
La firma de función debe ser la misma con el fin de ser anulado.
| This section is incomplete Reason: handling of function signatures (member lookup rules) |
Original:
The function signature must be the same in order to be overridden.
| This section is incomplete Reason: handling of function signatures (member lookup rules) |
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
El tipo de retorno de una función virtual primordial no necesariamente tiene que ser idéntica a la que la función de reemplazar. Los tipos pueden ser diferentes si son' covariante con cada otro. Dos tipos son covariantes si cumplen los siguientes requisitos:
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.
You can help to correct and verify the translation. Click here for instructions.
- Aquí nos referimos a la función primordial como
Derived::f()ya la función de sobrescribir cuando seBase::f()Original:Here we refer to the overriding function asDerived::f()and to the overridden function asBase::f()The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- ambos tipos son punteros o referencias a clases. Multi-nivel de punteros o referencias no se admiten .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 clase del tipo de retorno de
Base::f()debe ser una clase base no ambigua y accesible directa o indirecta de la clase del tipo de retorno deDerived::f().Original:the class of the return type ofBase::f()must be a unambiguous and accessible direct or indirect base class of the class of the return type ofDerived::f().The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - el tipo de retorno de
Derived::f()debe ser cv-calificados igual o menor que el tipo de retorno deBase::f().Original:the return type ofDerived::f()must be equally or less cv-calificados than the return type ofBase::f().The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Si una función virtual se llama directamente, es decir, de manera explícita calificación de la clase es un miembro de, entonces el mecanismo de llamada virtual es suprimida y que la aplicación particular, se llama .
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.
You can help to correct and verify the translation. Click here for instructions.
Un destructor virtual de una clase base siempre es reemplazado por un destructor de una clase derivada, a pesar de que los destructores no se heredan de otra manera .
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.
You can help to correct and verify the translation. Click here for instructions.
Las reglas de acceso a una función virtual están determinados por la declaración primera. Las reglas de acceso definidas por las declaraciones de las funciones primordiales se aplican sólo a las llamadas de función directas .
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.
You can help to correct and verify the translation. Click here for instructions.
virtual función especificador implica afiliación, por lo que sólo pueden ser funciones miembro virtual. También, puesto que una instancia de una clase que se necesita con el fin de llamar a una función virtual, función virtual no puede ser 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.
You can help to correct and verify the translation. Click here for instructions.
Funciones de plantillas no se pueden declarar
virtual. Esto se aplica sólo a las funciones que sí son plantillas - una función miembro regular de una plantilla de clase pueden ser declarados virtuales .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.
You can help to correct and verify the translation. Click here for instructions.
[editar] Ejemplo
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; }
[editar] Ver también
- anular especificador (ya que C + +11)
- último especificador (ya que C + +11)