【问题标题】:Acessing overloaded function from an Abstract Base class从抽象基类访问重载函数
【发布时间】:2017-12-16 14:31:22
【问题描述】:

我知道以前有人以某种形式提出过这个问题。但我还是一头雾水。

假设我有两个班级。

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; 

in public B 指的是 A 中的虚函数 .... 不是非虚函数 ... 所以我认为这不是解决方案。

【问题讨论】:

  • using A::foo; 指 A 中的所有 foo。为一个函数选择其他名称。
  • 修复您的设计。对 2 个不同的函数及其类型使用相同的名称是这里的真正问题。

标签: c++ c++11 inheritance derived-class abstract-base-class


【解决方案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 不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2018-07-11
    • 2019-01-18
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多