繁体   English   中英

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

[英]Calling base class method in derived class without specifying base class name

当重写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类。提前谢谢你。 安德里亚

不,没有花哨的关键字来访问基类。 正如已经提到的一些评论,标准委员会拒绝了一些提案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM