Да, это будет делать именно то, что вы собираетесь делать.Но рассмотрим другой вариант: публичное наследование и скрытие нежелательных методов:
class A
{
public:
int a() {return 0xaa;}
};
class B: public A
{
public:
int b() {return 0xbb;}
};
class C: public B
{
private:
using B::b; // makes the method called b private
};
...
B().b(); // OK, using method b in class B
C().b(); // error: b is private in class C
C().B::b(); // OK: calling b in base-class (not sure if you want to prevent this)
Это будет работать как с виртуальным, так и с не виртуальным наследованием.