Явные переопределения (расширения компонентов C++)

В этом разделе описывается явного переопределения члена базового класса или интерфейса.() С именем явное переопределение следует использовать только для переопределения метода производным методом, который имеет другое имя.

AfxWndProc

Синтаксис

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

Параметры

  • переопределить-функция-декларатор
    Возвращаемый тип, имя и список аргументов переопределяющей функции.Обратите внимание, что при переопределении метода функция не должна иметь то же имя, что и в переопределенной функции.

  • тип
    Базовый тип, содержащий функцию для переопределения.

  • функция
    Разделенный запятыми список из одного или нескольких имен функций, который необходимо переопределить.

  • переопределить-функция-определение
    Выписки тела функции, которые определяют переопределяющей функции.

Заметки

Использование явного переопределения, чтобы создать псевдоним для сигнатуры метода или предоставлять различные реализации методов с той же сигнатурой.

Дополнительные сведения об изменении расширения функциональности наследуемых типов и унаследованных членов типов см. в разделе Спецификаторы переопределения (расширения компонентов C++).

Среда выполнения Windows

fw0bbh51.collapse_all(ru-ru,VS.110).gifТребования

Параметр компилятора: /ZW

Среда CLR

Заметки

Дополнительные сведения о точной переопределяет в машинном коде или код компилированный с /clr:oldSyntax см. в разделе Полностью переопределяет (C++).

fw0bbh51.collapse_all(ru-ru,VS.110).gifТребования

Параметр компилятора: /clr

fw0bbh51.collapse_all(ru-ru,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

  

Пример

Следующий пример кода иллюстрирует явную реализацию интерфейса, который реализует коллекцию safe типа.

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

См. также

Основные понятия

Расширения компонентов для платформ среды выполнения