Class Visual C++ .NET

#include "stdafx.h"
using namespace System;
ref class MyClass{
   public:
      virtual void f() { Console::WriteLine("MyClass::f"); }
      virtual void g() { Console::WriteLine("MyClass::g"); }
};
interface class MyInterface{
   void f();
   void g();
};
ref class C : MyClass, MyInterface{
   public:
   virtual void f() new{
      Console::WriteLine("C::f");
   }
   virtual void g() override{
      Console::WriteLine("C::g");
   }
};
int main()
{
   MyClass^ b = gcnew MyClass();
   C^ c = gcnew C();
   MyInterface^ i = c;
   b->f(); // calls MyClass::f
   c->f(); // calls C::f
   i->f(); // calls C::f since C::f implements MyInterface::f
   MyClass^ bc = c;  // b pointing to instance of C
   bc->f(); // calls MyClass::f since C::f is unrelated
   b->g();  // calls MyClass::g
   c->g();  // calls C::g
   i->g();  // calls C::g since C::g implements MyInterface::g
   bc->g(); // calls C::g since C::g overrides MyClass::g
}