Explizite Überschreibungen (Komponentenerweiterungen für C++)
In diesem Thema wird erläutert, wie Sie explizit einen Member einer Basisklasse oder Schnittstelle veranschaulicht.Eine benannte () explizite Überschreibung sollte nur verwendet werden, um eine Methode in einer abgeleiteten Methode überschreiben, die einen anderen Namen aufweist.
Alle Laufzeiten
Syntax
overriding-function-declarator = type::function [,type::function] { overriding-function-definition }
overriding-function-declarator = function { overriding-function-definition }
Parameter
Überschreibend-FUNCTIONDeklarator
Der Rückgabetyp, den Namen 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.Funktion
Eine durch Trennzeichen getrennte Liste von einem oder mehreren Funktionsnamen zu überschreiben.Überschreibend-FUNCTIONDefinition
Die Funktionsrumpf Anweisungen, die die überschreibende Funktion definieren.
Hinweise
Die explizite Überschreibungen verwenden, um einen Alias für eine Methodensignatur zu erstellen, oder verschiedener Implementierungen für Methoden mit derselben Signatur enthalten.
Weitere Informationen über das Ändern des Verhaltens der vererbten Typen und Typmember der geerbten finden Sie unter Überschreibungsspezifizierer (Komponentenerweiterungen für C++).
Windows-Runtime
Anforderungen
Compileroption: /ZW
Common Language Runtime
Hinweise
Weitere Informationen über explizite Überschreibungen in systemeigenem Code oder Code, die mit /clr:oldSyntax kompiliert werden, finden Sie unter Explizite Überschreibungen (C++).
Anforderungen
Compileroption: /clr
Beispiele
Beispiel
Das folgende Codebeispiel zeigt eine einfache, implizite Überschreibung und eine Implementierung eines Members in einer Basisschnittstelle, nicht mit der 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();
}
Output
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie alle Schnittstellenmember mit einer allgemeinen Signatur, die explizite Überschreibung Attributsyntax 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();
}
Output
Beispiel
Das folgende Codebeispiel zeigt, wie eine Überschreibung der Funktion einen anderen Namen der Funktion verfügen kann, die er 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();
}
Output
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;
}
};