virtual function specifier
Aus 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. |
<metanoindex/>
Gibt an, dass eine Funktion virtuell ist
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.
Syntax
virtual function_declaration ;
|
|||||||||
Erklrung
Virtuelle Funktionen sind Mitglied Funktionen, deren Verhalten kann in abgeleiteten Klassen berschrieben. Als nicht-virtuellen Funktionen Gegensatz wird die berschriebene Verhalten beibehalten, auch wenn es keine Kompilierung Informationen ber die tatschliche Typ der Klasse. Das heit, wrde, selbst wenn eine abgeleitete Klasse behandelt mit Zeiger oder eine Referenz auf die Basisklasse, ein Aufruf einer berschriebenen virtuellen Funktion aufzurufen, das Verhalten in der abgeleiteten Klasse definiert .
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.
Die Signatur der Funktion mssen die gleichen sein, um berschrieben werden.
| 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.
Der Rckgabetyp einer bergeordneten virtuellen Funktion nicht notwendigerweise die identisch mit der berschriebenen Funktion sein. Die Arten knnen unterschiedlich sein, wenn sie kovariante mit jedem anderen sind. Zwei Typen sind kovariante, wenn sie die folgenden Anforderungen erfllen:
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.
- Hier verweisen wir auf die bergeordnete Funktion als
Derived::f()und der berschriebenen Funktion alsBase::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.
- beide sind Zeiger oder Referenzen auf Klassen. Multi-Level-Zeiger oder Referenzen sind nicht erlaubt .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. - die Klasse der Rckgabetyp
Base::f()muss eine eindeutige und leicht zugngliche direkte oder indirekte Basisklasse der Klasse der RckgabetypDerived::f()sein .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. - der Rckgabetyp
Derived::f()muss gleich oder weniger cv-qualifiziert als der RckgabetypBase::f()sein .Original:the return type ofDerived::f()must be equally or less cv-qualifiziert 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.
Wenn eine virtuelle Funktion direkt aufgerufen wird, das heit, die Klasse explizit qualifizierenden es ist ein Mitglied, dann die virtuelle Aufrufmechanismus unterdrckt wird und dass insbesondere die Umsetzung genannt .
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.
Ein virtueller Destruktor der Basisklasse ist immer berschrieben von einem Destruktor einer abgeleiteten Klasse, obwohl dass Destruktoren sonst werden nicht vererbt .
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.
Die Zugriffsregeln auf eine virtuelle Funktion werden von der ersten Angabe bestimmt. Regeln fr den Zugang von den Erklrungen der bergeordneten Funktionen definiert gelten nur fr die direkte Funktionsaufrufe .
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 Funktion specifier bedeutet die Mitgliedschaft, also nur Member-Funktionen knnen virtuell sein. Auch, weil eine Instanz einer Klasse ist erforderlich, um eine virtuelle Funktion aufrufen, knnen virtuelle Funktion nicht static sein .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.
Funktionen Vorlagen knnen nicht
virtual deklariert werden. Dies gilt nur fr Funktionen, die selbst Vorlagen - ein ordentliches Mitglied Funktion einer Klasse Vorlage virtuell deklariert werden kann .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.
Beispiel
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;
}
Siehe auch
- berschreibungsspezifizierer (seit C++11)
- endgltigen Spezifizierer (seit C++11)