Я использую класс A из библиотеки и хочу добавить к нему некоторую функциональность через собственный класс B. Пользователь класса B должен быть производным от него, как если бы он производился от класса A.
class A {
public:
virtual void func1()=0;
virtual void func2()=0;
...
}
class B: public A {
public:
virtual void func1() {...}
}
Поэтому, если кто-то создаст класс C, производный от B, ему придется реализовать func2:
class C: public B {
public:
virtual void func2() {...}
}
Для моего приложения очень важно, чтобы класс C не перезаписывал func1, исключая B::func1().
Есть ли способ запретить перезапись этой виртуальной функции для всех дочерних классов B? Если не в простом С++, есть ли что-то в boost MPL, которое вызывает ошибку компилятора, когда эта функция перезаписывается?
A
должен переопределятьfunc2
, а если нет, то почему он виртуальный? - person SingleNegationElimination   schedule 24.08.2011new C
создании нового понтера компилятор попытается заставить его работать в самом производном классе. Остановка в середине цепочки вывода нарушила бы назначение виртуальных функций. - person RedX   schedule 24.08.2011B::func1
не было переопределено? - person CB Bailey   schedule 24.08.2011final
в 4.7. - person pythonic metaphor   schedule 24.08.2011