【问题标题】:Calling base class method in derived class without specifying base class name在派生类中调用基类方法而不指定基类名称
【发布时间】:2019-11-13 05:03:24
【问题描述】:

当覆盖 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 B
  }
};

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

【问题讨论】:

标签: c++ class methods virtual abstract


【解决方案1】:

不,没有花哨的关键字来访问基类。 正如一些 cmets 已经提到的,一些提案已被标准委员会否决。

就个人而言,在某些情况下,我选择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();
  }
};

【讨论】:

  • 链接问题中讨论的相同建议也适用于此处。最好将别名设为私有。
猜你喜欢
  • 1970-01-01
  • 2016-01-01
  • 2014-02-15
  • 2014-09-05
  • 2016-07-03
  • 2014-03-17
  • 2019-07-25
  • 2018-11-11
  • 1970-01-01
相关资源
最近更新 更多