Explizite Überschreibungen (Komponentenerweiterungen für C++)
In diesem Thema wird erläutert, wie explizit einen Member einer Basisklasse oder Schnittstelle überschreibt. Eine benannte (explizite Überschreibung) sollte nur verwendet werden, um eine Methode mit einer abgeleiteten Methode zu überschreiben, die einen anderen Namen verfügt.
Alle Laufzeiten
Syntax
overriding-function-declarator = type::function [,type::function] { overriding-function-definition }
overriding-function-declarator = function { overriding-function-definition }
Parameter
overriding-function-declarator
Der Rückgabetyp, der Name und die Argumentliste der überschreibenden Funktion. Beachten Sie, dass die überschreibende Funktion nicht den gleichen Namen wie die Funktion haben muss, die überschrieben wird.type
Der Basistyp, der eine Funktion enthält, um zu überschreiben.function
Eine durch Trennzeichen getrennte Liste mehrere Funktionsnamen zu überschreiben.overriding-function-definition
Die Funktionsrumpfanweisungen, die die überschreibende Funktion definieren.
Hinweise
Explizite Überschreibungen der Verwendung, um einen Alias für eine Methodensignatur zu erstellen, oder von verschiedenen Implementierungen für Methoden mit der gleichen Signatur zuordnen.
Informationen zum Ändern des Verhaltens der geerbten Typen und der geerbten Typmember, finden Sie unter Überschreibungsspezifizierer (Komponentenerweiterungen für C++).
Windows-Runtime
Voraussetzungen
Compileroption: /ZW
Common Language Runtime
Hinweise
Informationen über explizite Überschreibungen systemeigenen Code oder Code, die mit /clr:oldSyntax kompiliert werden, finden Sie unter Explizite Überschreibungen (C++).
Voraussetzungen
Compileroption: /clr
Beispiele
Beispiel
Im folgenden Codebeispiel wird eine einfache, implizite Überschreibung und eine Implementierung eines Members in eine Basisschnittstelle, nicht mit expliziten Überschreibungen an.
// explicit_override_1.cpp
// compile with: /clr
interface struct I1 {
virtual void f();
};
ref class X : public I1 {
public:
virtual void f() {
System::Console::WriteLine("X::f override of I1::f");
}
};
int main() {
I1 ^ MyI = gcnew X;
MyI -> f();
}
Ausgabe
Beispiel
Im folgenden Codebeispiel wird gezeigt, wie alle Schnittstellenmember mit einer allgemeinen Signatur, mithilfe der expliziten Überschreibungssyntax implementiert.
// explicit_override_2.cpp
// compile with: /clr
interface struct I1 {
virtual void f();
};
interface struct I2 {
virtual void f();
};
ref struct X : public I1, I2 {
virtual void f() = I1::f, I2::f {
System::Console::WriteLine("X::f override of I1::f and I2::f");
}
};
int main() {
I1 ^ MyI = gcnew X;
I2 ^ MyI2 = gcnew X;
MyI -> f();
MyI2 -> f();
}
Ausgabe
Beispiel
Das folgende Codebeispiel zeigt, wie eine Funktionsüberschreibung einen anderen Namen der Funktion verfügen kann, die sie implementiert.
// explicit_override_3.cpp
// compile with: /clr
interface struct I1 {
virtual void f();
};
ref class X : public I1 {
public:
virtual void g() = I1::f {
System::Console::WriteLine("X::g");
}
};
int main() {
I1 ^ a = gcnew X;
a->f();
}
Ausgabe
Beispiel
Im folgenden Codebeispiel wird eine explizite Schnittstellenimplementierung an, die eine typsichere Auflistung implementiert.
// explicit_override_4.cpp
// compile with: /clr /LD
using namespace System;
ref class R : ICloneable {
int X;
virtual Object^ C() sealed = ICloneable::Clone {
return this->Clone();
}
public:
R() : X(0) {}
R(int x) : X(x) {}
virtual R^ Clone() {
R^ r = gcnew R;
r->X = this->X;
return r;
}
};