Как производный класс может наследовать статическую функцию от базового класса?
В некоторой степени шаблон 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 !!"
Класс inherit признаков позволяет повторно inheritance использовать статический inherit метод base::shout
, «переопределяя» base::talk
с cxx помощью derived::talk
. Тем не менее, есть inherit несколько отличий от фактического c++ наследования:
- Функция для вызова разрешается во время компиляции
- У дочернего метода не обязательно должна быть такая же сигнатура, как у родительского.
Он также работает inheritence со статическими полями и cxx определениями типов, лучший inheritance пример - std::iterator_traits.
c++
inheritance
static
Как производный класс может наследовать статическую функцию от базового класса?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.