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
Requisitos
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++).
Requisitos
Opção de compilador:/clr
Exemplos
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