Доступ к перегруженной функции из абстрактного базового класса

Я знаю, что этот вопрос уже задавался в той или иной форме. Но я все еще в замешательстве.

Предположим, у меня есть два класса.

class A{
public:
void foo(int a, int b);
protected:
virtual void foo(int a) = 0;
}

class B : public class A{
void foo(int a);
}

Теперь, если я хочу сделать видимость не виртуальной функции в классе A общедоступной в классе B …. как мне это сделать ?? … Другими словами, в настоящее время я могу вызывать не виртуальную функцию таким образом

B b;
b.A::foo(3, 5);

и я хочу избежать этого

и решение положить это

using A::foo;

в общественных местах B относится к виртуальной функции в A …. не к виртуальной функции … поэтому я думаю, что это не решение.

0

Решение

class A{
public:
void foo(int a, int b);
protected:
virtual void foo(int a) = 0;
};

class B : public A{
public:
using A::foo;
protected:
void foo(int a);
};

void f()
{
B b;
b.foo(1,2);  // OK
b.foo(3);    //  error: ‘virtual void B::foo(int)’ is protected within this context
}

работает как предполагалось. foo с двумя параметрами вызывается, foo с одним — нет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector