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

fw0bbh51.collapse_all(de-de,VS.110).gifAnforderungen

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++).

fw0bbh51.collapse_all(de-de,VS.110).gifAnforderungen

Compileroption: /clr

fw0bbh51.collapse_all(de-de,VS.110).gifBeispiele

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;
   }
};

Siehe auch

Konzepte

Komponentenerweiterungen für Laufzeitplattformen