Как производный класс может наследовать статическую функцию от базового класса?

В некоторой степени шаблон c++ признаков позволяет наследовать static и переопределять статические inherit методы.

Сначала начните с cxx базового класса:

struct base {
  static void talk()  { std::cout << "hello" << std::endl; }
  static void shout() { std::cout << "HELLO !!" << std::endl; }
};

Затем создайте inheritance его и переопределите некоторые static методы:

struct derived: public base {
  static void talk()  { std::cout << "goodbye" << std::endl; }
};

А теперь вызовите c++ методы через класс свойств:

template < class T >
struct talker_traits {
  static void talk() { T::talk(); }
  static void shout() { T::shout(); }
};

talker_traits::talk()     // prints "hello"
talker_traits::shout()    // prints "HELLO !!"

talker_traits::talk()  // prints "goodbye"
talker_traits::shout() // prints "HELLO !!"

ideone demo

Класс inherit признаков позволяет повторно inheritance использовать статический inherit метод base::shout, «переопределяя» base::talk с cxx помощью derived::talk. Тем не менее, есть inherit несколько отличий от фактического c++ наследования:

  • Функция для вызова разрешается во время компиляции
  • У дочернего метода не обязательно должна быть такая же сигнатура, как у родительского.

Он также работает inheritence со статическими полями и cxx определениями типов, лучший inheritance пример - std::iterator_traits.

c++

inheritance

static

2022-10-22T09:58:24+00:00
Вопросы с похожей тематикой, как у вопроса:

Как производный класс может наследовать статическую функцию от базового класса?