Jawne zastąpienia (C++ Component Extensions)
W tym temacie omówiono sposób jawnie zastępują członka klasy podstawowej lub interfejsu.Nazwany override (explicit) można używać tylko do zastąpić metodę metodą pochodnych, który ma inną nazwę.
Wszystkich modułów wykonawczych.
Składnia
overriding-function-declarator = type::function [,type::function] { overriding-function-definition }
overriding-function-declarator = function { overriding-function-definition }
Parametry
niewłaściwy przesłanianie funkcja deklarator
Zwrotu typu, nazwy i argument lista funkcji nadrzędnych.Należy zauważyć, że funkcja nadrzędnych nie musi mieć taką samą nazwę jak funkcja zastąpieniu.Typ
Typ podstawowy zawiera funkcję, aby zastąpić.Funkcja
Lista jednego lub więcej nazw funkcji, aby zastąpić rozdzielanych przecinkami.przesłanianie--definicja funkcji
Organ instrukcje funkcyjne definiujących funkcji nadrzędnych.
Uwagi
Użyj jawnego zastępuje utworzony alias podpis metody lub zapewniają różne implementacje dla metody witht ten sam podpis.
Informacje dotyczące modyfikowania zachowania dziedziczone typy i członków dziedziczonych typu, zobacz Specyfikatory zastąpienia (C++ Component Extensions).
Środowisko wykonawcze systemu Windows
Wymagania
Opcja kompilatora:/ZW
Środowisko uruchomieniowe języka wspólnego
Uwagi
Informacje o jawnych zastępuje w kodzie macierzystym lub kod skompilowany z /clr:oldSyntax, zobacz Jawne przesłonięcia (C++).
Wymagania
Opcja kompilatora:/clr
Przykłady
Przykład
Poniższy przykład kodu pokazuje override proste, oczywiste i wykonania członka w interfejs podstawowy, nie używając jawne przesłonięcia.
// 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();
}
Dane wyjściowe
Przykład
Poniższy przykład kodu pokazuje jak zaimplementować wszystkich członków interfejsu podpisem wspólne, używając składni jawne override.
// 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();
}
Dane wyjściowe
Przykład
Poniższy przykład kodu pokazuje, jak zastępowanie funkcji może mieć inną nazwę funkcji, które implementuje.
// 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();
}
Dane wyjściowe
Przykład
Poniższy przykład kodu pokazuje jawnej implementacji, która implementuje bezpiecznego gromadzenia typu.
// 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;
}
};