Поделиться через


Предупреждение компилятора (уровень 4) C4487

"derived_class_function" : соответствует наследуемого не-виртуального метода "base_class_function", но не имеет явного метки "new"

Функция в производном классе имеет ту же сигнатуру, что и функция не виртуального базового класса. C4487 напоминает, что производная функция класса не переопределяет функцию базового класса. Явным образом помечайте производную функцию класса, чтобы new устранить это предупреждение.

Дополнительные сведения см. в статье "Новые слоты в vtable".

Пример

Следующий пример приводит к возникновению ошибки C4487.

// C4487.cpp
// compile with: /W4 /clr
using namespace System;
public ref struct B {
   void f() { Console::WriteLine("in B::f"); }
   void g() { Console::WriteLine("in B::g"); }
};

public ref struct D : B {
   void f() { Console::WriteLine("in D::f"); }   // C4487
   void g() new { Console::WriteLine("in D::g"); }   // OK
};

int main() {
   B ^ a = gcnew D;
   // will call base class functions
   a->f();
   a->g();
}