Есть ли причина, по которой разрешения на переопределенную виртуальную функцию С++ отличаются от базового класса? Есть ли опасность при этом?
Например:
class base {
public:
virtual int foo(double) = 0;
}
class child : public base {
private:
virtual int foo(double);
}
С++ faq говорит, что это плохая идея, но не говорит, почему.
Я видел эту идиому в некотором коде, и я считаю, что автор пытался сделать окончательный класс на основе предположения о невозможности переопределить частную функцию-член. Однако В этой статье показан пример переопределения частных функций. Конечно, другая часть С++ faq рекомендует не делать этого.
Мои конкретные вопросы:
-
Есть ли какая-либо техническая проблема с использованием другого разрешения для виртуальных методов в производных классах по сравнению с базовым классом?
-
Есть ли законная причина для этого?