Вызов метода базового класса в производном классе без указания имени базового класса - PullRequest
3 голосов
/ 02 июля 2019

При переопределении виртуального метода 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. Заранее спасибо. Andrea

1 Ответ

3 голосов
/ 02 июля 2019

Нет, не существует причудливого ключевого слова для доступа к базовому классу.Как уже упоминалось в некоторых комментариях, стандартный комитет отклонил некоторые предложения.

Лично в некоторых случаях я выбираю директиву 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();
  }
};
...