четверг, мая 26, 2005

Сокрытие виртуальных функций (virtual functions hiding)

Если сделать наследование вида:

class A
{
public:
virtual void f();
virtual void f(int i);
};

class B : public A
{
public:
virtual void f();
};
То функция f(int) не будет видна из B.
То есть вот так не получится:
B test;
test.f(7);

Однако сделать функцию f(int) видимой в B все-таки можно. Для этого используется ключевое слово "using".
class B : public A
{
public:
virtual void f();
using A::f;
};
Однако счастье наступит не везде. Эта фича реализована не во всех компиляторах. Например, Visual C++ 6.0 такое не понимает.