在派生类中调用基类方法而不指定基类名称

时间:2019-07-02 14:05:29

标签: c++ class methods virtual abstract

当重写C ++虚拟方法时,是否有一种方法可以调用基类方法而无需指定确切的基类名称,就像我们可以在C#中使用“ base”关键字来做到这一点一样?我知道这可能与多重继承相冲突,但是我想知道是否更现代的C ++版本引入了这种可能性。 我想要的是这样的:

class A
{
  public:
  virtual void paint() {
    // draw something common to all subclasses
  }
};

class B : public A
{
  public:
  virtual void paint() override {
    BASE::paint();
    // draw something specific to class A
  }
};

我知道在B :: paint()中我们可以调用A :: paint(),我只想知道是否存在一种更“通用”的方法来调用基本方法,而无需显式引用类A。 先感谢您。 安德里亚

1 个答案:

答案 0 :(得分:3)

否,没有fancy关键字可以访问基类。 正如已经提到的一些评论,一些建议已被标准委员会拒绝。

在某些情况下,我个人选择使用typedef / using指令;尤其是当我的层次结构具有模板化类时。

例如:

template <typename T>
class A {};

template <typename U, typename T>
class B : public A<T> {
 private:
  using Base = A<T>;

 public:
  void foo() {
    // Base::foo();
  }
};