Explicitní přepsání (C++/CLI a C++/CX)
Toto téma popisuje, jak explicitně přepsat člen základní třídy nebo rozhraní. Pojmenované (explicitní) přepsání by se mělo použít pouze k přepsání metody odvozenou metodou, která má jiný název.
Všechny moduly runtime
Syntaxe
overriding-function-declarator = type::function [,type::function] { overriding-function-definition }
overriding-function-declarator = function { overriding-function-definition }
Parametry
přepsání deklarátoru funkce
Návratový typ, název a seznam argumentů přepisování funkce. Všimněte si, že přepsání funkce nemusí mít stejný název jako přepsaná funkce.
type
Základní typ, který obsahuje funkci k přepsání.
funkce
Seznam s oddělovači jednoho nebo více názvů funkcí, které se mají přepsat.
přepisování definice funkce
Příkazy těla funkce, které definují přepisování funkce.
Poznámky
Explicitní přepsání použijte k vytvoření aliasu pro podpis metody nebo k poskytnutí různých implementací metod se stejným podpisem.
Informace o úpravě chování zděděných typů a zděděných členů typů naleznete v tématu Přepsání specifikátorů.
prostředí Windows Runtime
Požadavky
Možnost kompilátoru: /ZW
CLR (Common Language Runtime)
Poznámky
Informace o explicitních přepsání v nativním kódu nebo kódu kompilovaném pomocí /clr:oldSyntax
naleznete v tématu Explicitní přepsání.
Požadavky
Možnost kompilátoru: /clr
Příklady
Následující příklad kódu ukazuje jednoduché, implicitní přepsání a implementaci člena v základním rozhraní, nikoli použití explicitních přepsání.
// 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();
}
X::f override of I1::f
Následující příklad kódu ukazuje, jak implementovat všechny členy rozhraní se společným podpisem pomocí explicitní syntaxe přepsání.
// 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();
}
X::f override of I1::f and I2::f
X::f override of I1::f and I2::f
Následující příklad kódu ukazuje, jak může přepsání funkce mít jiný název než funkce, která 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();
}
X::g
Následující příklad kódu ukazuje explicitní implementaci rozhraní, která implementuje typ bezpečné kolekce.
// 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;
}
};