Compartilhar via


Substituições Explícitas (Extensões de Componentes C++)

Este tópico discute como substituir explicitamente um membro de uma classe base ou interface.Uma substituição (explícita) nomeada só deve ser usada para substituir um método com um método derivado que tem um nome diferente.

Todos os tempos de execução

Sintaxe

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

Parâmetros

  • Declarador de função substituindo
    A lista de argumento, o nome e o tipo de retorno da função de substituição.Observe que a função de substituição não tem ter o mesmo nome da função que está sendo substituído.

  • tipo
    O tipo base contém uma função para substituir.

  • função
    Uma lista delimitada por vírgula de um ou mais nomes de função para substituir.

  • definição de função substituindo
    As instruções do corpo de função definem a função de substituição.

Comentários

Uso explícito substitui para criar um alias para uma assinatura de método ou para fornecer implementações diferentes de métodos witht a mesma assinatura.

Para obter informações sobre como modificar o comportamento de tipos herdados e membros de tipo herdadas, consulte Especificadores de Substituição (Extensões de Componentes C++).

Tempo de Execução do Windows

fw0bbh51.collapse_all(pt-br,VS.110).gifRequisitos

Opção de compilador:/ZW

Common Language Runtime

Comentários

Para obter informações sobre explícita substitui em código nativo ou código compilado com /clr:oldSyntax, consulte Substituições Explicit (C++).

fw0bbh51.collapse_all(pt-br,VS.110).gifRequisitos

Opção de compilador:/clr

fw0bbh51.collapse_all(pt-br,VS.110).gifExemplos

Exemplo

O exemplo de código a seguir mostra uma substituição simple e implícita e a implementação de um membro em uma interface de base não usando substituições explícitas.

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

Saída

  

Exemplo

O exemplo de código a seguir mostra como implementar todos os membros de interface com uma assinatura comum usando a sintaxe explícita de substituição.

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

Saída

  
  

Exemplo

O exemplo de código a seguir mostra como substituir uma função pode ter um nome diferente da função que está implementando.

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

Saída

  

Exemplo

O exemplo de código a seguir mostra uma implementação de interface explícita que implementa uma coleção de tipo seguro.

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

Consulte também

Conceitos

Extensões de componente para plataformas de tempo de execução