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