显式重写(C++ 组件扩展)

本主题讨论如何显式重写基类或接口的成员。 只应在名为 () 显式重写重写与具有不同的名称的派生方法的方法。

所有运行时

语法

overriding-function-declarator = type::function [,type::function] { overriding-function-definition }
overriding-function-declarator = function { overriding-function-definition }

参数

  • 重写函数声明
    返回类型、名称和参数列表进行重写的函数。 注意该重写函数不必与被重写的函数相同。

  • type
    包含一个功能重写的基类型。

  • Function — 函数
    逗号分隔列表一个或多个函数名重写。

  • 重写函数定义
    定义与重写函数的函数体语句。

备注

显式的使用重写创建方法签名的别名,或者为方法提供不同的实现具有相同签名。

有关修改继承的类型和继承的类型成员行为的信息,请参见 重写说明符(C++ 组件扩展)

Windows 运行时

fw0bbh51.collapse_all(zh-cn,VS.110).gif要求

编译器选项: /ZW

公共语言运行时

备注

有关显式信息在本机代码中重写或代码编译 /clr:oldSyntax,请参见 显式重写(C++)

fw0bbh51.collapse_all(zh-cn,VS.110).gif要求

编译器选项: /clr

fw0bbh51.collapse_all(zh-cn,VS.110).gif示例

示例

下面的代码示例演示简单,隐式重写,并一个成员的实现基本接口的,不使用显式重写。

// 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();
}

Output

  

示例

使用显式重写语法,下面的代码示例演示如何实现具有一个公共签名的所有接口成员,。

// 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();
}

Output

  
  

示例

下面的代码示例演示如何重写函数可以有它实现从函数不同的名称。

// 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();
}

Output

  

示例

下面的代码示例演示一个实现类型安全集合的显式接口实现。

// 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;
   }
};

请参见

概念

适用于运行时平台的组件扩展