簡體   English   中英

從Abstract Base類訪問重載函數

[英]Acessing overloaded function from an Abstract Base class

我知道以前曾有人以某種形式問過這個問題。 但是我還是很困惑。

假設我有兩個班。

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類中公開A類中非虛函數的可見性,我該如何做? ...換句話說,目前我能夠以這種方式調用非虛函數

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

我想避免這種情況

以及解決這個問題的方法

using A::foo; 

在公共B中,A是指A中的虛擬功能,而不是非虛擬功能,所以我認為這不是解決方案。

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則不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM