Substituições Explícitas (Extensões de Componentes C++)
Este tópico discute como substituir explicitamente um membro de uma classe base ou de uma interface. Uma substituição (explícita) nomeados só deve ser usada para substituir um método com um método derivada 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
overriding-function-declarator
O tipo de retorno, o nome, e a lista de argumentos da função substituindo. Observe que a função substituindo não tem que ter o mesmo nome que a função que está sendo substituída.type
O tipo de base que contém uma função para substituir.function
Uma lista delimitada por vírgulas de um ou mais nomes de função a ser substituído.overriding-function-definition
As instruções do corpo da função que definem a função substituindo.
Comentários
Substituições explícitas de uso para criar um alias para uma assinatura de método, ou para fornecer implementações diferentes para métodos com a mesma assinatura.
Para obter informações sobre como alterar o comportamento de tipos e herdados de membros herdados do tipo, consulte Especificadores de Substituição (Extensões de Componentes C++).
Tempo de Execução do Windows
Requisitos
Opção do compilador: /ZW
Common Language Runtime
Comentários
Para obter informações sobre as substituições explícitas em código nativo ou no código compilado com /clr:oldSyntax, consulte Substituições Explícitas (C++).
Requisitos
Opção do compilador: /clr
Exemplos
Exemplo
O exemplo de código a seguir mostra uma substituição e uma implementação simples, implícitas 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 da 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 uma substituição da função pode ter um nome diferente de 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 seguinte mostra uma implementação explícita da interface que implementa uma coleção do 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