2017-07-12 8 views
0

私はこの質問が何らかの形で以前に求められていることを知っています。しかし、私はまだ混乱しています。抽象基本クラスからのオーバーロードされた関数の処理

私は2つのクラスがあるとします。

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のpublicにしたい場合はどうすればいいですか? ...つまり、現在、私は、このように

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

を非仮想関数を呼び出すことができると私はこれを避けたい^

この

using A::foo; 

を置くの溶液公共のBでAの仮想関数を参照してください....非仮想関数ではない...だから私は解決策ではないと思う。

+0

'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 
} 

が有効です。 2つのパラメータを持つfooは呼び出し可能で、fooは1つではありません。

関連する問題