明示的なオーバーライド (C++/CLI および C++/CX)
このトピックでは、基底クラスまたはインターフェイスのメンバーを明示的にオーバーライドする方法について説明します。 名前付きの (明示的な) オーバーライドは、別の名前を持つ派生メソッドを使用してメソッドをオーバーライドするためにのみ使用する必要があります。
すべてのランタイム
構文
overriding-function-declarator = type::function [,type::function] { overriding-function-definition }
overriding-function-declarator = function { overriding-function-definition }
パラメーター
overriding-function-declarator
オーバーライドする関数の戻り値の型、名前、および引数リスト。 オーバーライドする関数に、オーバーライドされる関数と同じ名前があってはならないことに注意してください。
type
オーバーライドする関数を含む基本型。
function
オーバーライドする 1 つまたは複数の関数の名前のコンマ区切りのリスト。
overriding-function-definition
オーバーライドする関数を定義する関数の本体ステートメント。
解説
明示的なオーバーライドを使用して、メソッドのシグネチャのエイリアスを作成するか、同じシグネチャでメソッドの異なる実装を行います。
継承された型と継承された型のメンバーの動作を変更する方法の詳細については、「オーバーライド指定子」を参照してください。
Windows ランタイム
要件
コンパイラ オプション: /ZW
共通言語ランタイム
解説
ネイティブ コードまたは /clr:oldSyntax
でコンパイルされたコードでの明示的なオーバーライドについては、「明示的なオーバーライド」を参照してください。
要件
コンパイラ オプション: /clr
例
次のコード例では、基本インターフェイスでの単純で暗黙的なオーバーライドとメンバーの実装を示します。ここでは明示的なオーバーライドは使用されていません。
// 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
次のコード例では、明示的なオーバーライド構文を使用して、すべてのインターフェイス メンバーを一般的なシグネチャで実装する方法を示します。
// 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
次のコード例では、関数のオーバーライドで、それが実装する関数とは異なる名前を持つ方法を示します。
// 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
次のコード例では、タイプ セーフ コレクションを実装する明示的なインターフェイスの実装を示します。
// 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;
}
};