Explicitní přepsání (rozšíření komponent C++)
Toto téma popisuje, jak explicitně přepsat člen základní třídy nebo rozhraní.Pojmenované přepsání (explicitní) lze používat pouze k přepsání metody odvozené metodou, která má jiný název.
Všechny moduly runtime
Syntax
overriding-function-declarator = type::function [,type::function] { overriding-function-definition }
overriding-function-declarator = function { overriding-function-definition }
Parametry
overriding-function-declarator
Návratový typ, název a argument seznam přepsanou funkci. Všimněte si, že převažující funkce nemusí mít stejný název jako funkce přepsání.type
Základní typ, který obsahuje funkci, kterou chcete změnit.function
Čárkami oddělený seznam jeden nebo více názvů funkcí přepsat.overriding-function-definition
Příkazy funkce těla, které definují přepsanou funkci.
Poznámky
Použití explicitní přepíše alias pro podpis metody nebo poskytují různé implementace pro metody pole stejný podpis.
Další informace o změně chování zděděné typy a členy typu zděděné, viz Override – specifikátory (rozšíření komponent C++).
prostředí Windows Runtime
Požadavky
Možnost kompilátoru: /ZW
Common Language Runtime
Poznámky
Pro informace o explicitní přepsání v nativní kód nebo kód zkompilován s /clr:oldSyntax, viz Explicitní přepsání (C++).
Požadavky
Možnost kompilátoru: /clr
Příklady
Příklad
Následující příklad kódu ukazuje přepsat implicitní, jednoduché a zavádění člen v základní rozhraní bez použití explicitního 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();
}
Výsledek
Příklad
Následující příklad kódu ukazuje, jak implementovat všechny členy rozhraní podpisem společné pomocí syntaxe explicitního 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();
}
Výsledek
Příklad
Následující příklad kódu ukazuje, jak přepsat funkci může mít jiný název funkce, kterou 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();
}
Výsledek
Příklad
Následující příklad kódu ukazuje implementace explicitního rozhraní implementující typ bezpečné shromažďování.
// 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;
}
};