class A { public: A() = default; virtual ~A() = default; virtual void Foo (float x, float y) = 0; void Foo() { Foo(0, 0); }; void Foo(Point pos) { Foo(pos.x, pos.y); }; int Bar() { return 42; }; }; class B : public A { public: B() = default; virtual ~B() = default; void Foo (float x, float y) override { cout << "Call B::Foo(" << x << "," << y <<")" << endl; }; }; int main() { B obj; obj.Foo(10, 10); //виртуальный метод работает нормально obj.Bar(); //и просто унаследованный Bar работает нормально obj.Foo(); //компилятор говорит, что такого метода у класса B нет }