2017-07-12 31 views
0

我知道这个问题以前曾以某种形式提出过。但我仍然感到困惑。从抽象基类中获取重载函数

假设我有两个类。

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); 
} 

现在,如果我想在类B中的公共类B中的非虚函数的可见性....我怎么做? ......换句话说目前我能够调用非虚拟函数以这种方式

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

,我想避免这种情况^

,并把这个

using A::foo; 

的解决方案在公开场合,B指虚拟函数在A中......而不是非虚函数......所以我认为这不是解决方案。

+0

'using A :: foo; '指A中的所有foo。为一个函数选择另一个名称。 –

+0

修复您的设计。使用相同的名称来处理2种不同的功能和类型是这里真正的问题。 –

回答

1
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不具有一个参数。