Я знаю, что некоторые думают, что я не должен переопределять не виртуальные функции из унаследованных классов, однако сейчас я использую эту концепцию миграции ролей, и это довольно особый случай, когда она отлично вписывается.
Что я хочу, это (о, а это C ++):
class A {
public:
void f() { doSomethingA(); }
};
class B : public A {
public:
void f() { A::f(); doSomethingB(); }
};
Однако, когда я делаю это, A::f
вызывается с this == 0
, что, очевидно, приводит к segfault. Я что-то не так делаю, или это просто невозможно? Моя текущая опция - прибегнуть к статическим функциям и явно передать объект, но я бы предпочел это так.
Да, я мог бы назвать их по-другому, но такого рода поражения с целью сделать их похожими на программиста. И я не могу сделать их виртуальными по разным причинам (наиболее важной из них является ролевая миграция, когда я действительно хочу различного поведения в зависимости от того, как я его использую).
Любая помощь приветствуется
EDIT
Спасибо всем за ответы, похоже, я наткнулся на ошибку в моей среде сборки, минимальный тестовый пример прошел нормально; и то же самое произошло с оптимизацией. Думаю, я мог бы попробовать это, прежде чем задавать вопрос, но обычно я предполагаю, что я делаю что-то не так.
Больше нечего здесь видеть, двигайтесь вперед .. Приносим извинения за неудобства ...:)