Compartir a través de


Invalidaciones explícitas (Extensiones de componentes de C++)

Este tema explica cómo reemplazar explícitamente un miembro de una clase base o interfaz.Un reemplazo (explícita) denominada sólo se debe utilizar para invalidar un método con un método derivado con un nombre diferente.

Todos los runtimes

Sintaxis

overriding-function-declarator = type::function [,type::function] { overriding-function-definition }
overriding-function-declarator = function { overriding-function-definition }

Parámetros

  • invalidar-función-declarante
    El tipo de valor devuelto, el nombre, y la lista de argumentos de la función de reemplazo.Observe que la función de reemplazo no tiene que tener el mismo nombre que la función que se reemplaza.

  • tipo
    El tipo base que contiene una función replace.

  • función
    Una lista delimitada por comas de uno o más nombres de función a reemplazar.

  • invalidar-función-definición
    Las instrucciones del cuerpo de la función que definen la función de reemplazo.

Comentarios

El uso explícito reemplaza para crear un alias para una firma de método, o proporcionar implementaciones diferentes para los métodos con la misma firma.

Para obtener información sobre la modificación del comportamiento de tipos heredados y miembros de tipo heredados, vea Especificadores de invalidación (Extensiones de componentes de C++).

Windows en tiempo de ejecución

fw0bbh51.collapse_all(es-es,VS.110).gifRequisitos

Opción del compilador: /ZW

Common Language Runtime

Comentarios

Para obtener información sobre explícita reemplaza en código nativo o código compilado con /clr:oldSyntax, vea Explícita reemplaza (C++).

fw0bbh51.collapse_all(es-es,VS.110).gifRequisitos

Opción del compilador: /clr

fw0bbh51.collapse_all(es-es,VS.110).gifEjemplos

Ejemplo

El ejemplo de código siguiente muestra un reemplazo simple, implícita y la implementación de un miembro en una interfaz base, no con explícita reemplaza.

// 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

  

Ejemplo

El siguiente ejemplo de código muestra cómo implementar todos los miembros de la interfaz con una firma común, utilizando la sintaxis de reemplazo explícita.

// 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

  
  

Ejemplo

El ejemplo de código siguiente muestra cómo un reemplazo de la función puede tener un nombre diferente de la función que implementa.

// 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

  

Ejemplo

El ejemplo de código siguiente se muestra una implementación de interfaz explícita que implemente una colección seguros de tipo.

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

Vea también

Conceptos

Extensiones de componentes para plataformas de tiempo de ejecución