Я задал этот вопрос:Идиома для конкретного рефакторинга в C++
Best Way to Refactor Class Hierarchy
в таком плохом состоянии, что я был логически вынужден принять совершенно правильный ответ. Моя проблема заключается в следующем:
У меня есть класс CGrandMother
, имеющий открытый метод virtual bool Compute()
, что делает
virtual bool Compute()
{
return false;
}
От CGrandMother
происходит публично CMother
, который не реализует Compute
. Теперь от CMother
выходят публично C1
и C2
, которые действительно реализуют virtual bool Compute()
. Теперь virtual bool C1::Compute()
и virtual bool C2::Compute()
соответственно делают много материала, соответствующего соответственно C1
, и до C2
, но также много одинакового материала, соответствующего CMother
. Теперь есть класс CFamily
, имеющие в качестве члена указателя на CMother
и почти везде в коде Compute
вызывается через строки вида
ptrCMother->Compute();
Я хочу вынесут общие вещи, связанные с CMother
сделано в C1
и C2
так что мне не придется менять все эти ptrCMother->Compute();
. Конечно, я могу создать функцию-член в CMother
, сделав это, и позвоните последнему в bool C1::Compute()
и bool C2::Compute()
. Но ...
В c++
, если у вас есть B
, вытекающие из A
, A::dostuff()
и B::dostuff()
и если p
указывает на тип B
то p->dostuff()
выполнит B::dostuff()
полиморфизмом. Я хотел бы знать, есть ли идиома/шаблон, позволяющий мне это сделать: «p->dostuff()
» будет исполнять «A::dostuff()
» или нет (согласно bool
, скажем), а затем «B::dostuff()
», что, конечно же, не происходит в c++
для функции-члены класса, которые не являются конструкторами и т. д.
Чтобы быть ясным: базовый метод не вызывается до того, как его соответствующий производный метод вызывается косвенным образом. Есть ли идиома/шаблон, позволяющий вызывать метод base base (или нет, согласно bool
) до его соответствующего производного метода?
Вы можете сделать 'p-> A :: dostuff()' для запуска функции 'A' функции. – Galik
Я знаю, но мне бы хотелось, чтобы он запускался по умолчанию (в этой идиоме), когда 'p-> B :: dostuff()' побежал –
Проголосовало за закрытие как неясное. Я считаю себя достаточно свободно владеющим C++. Бесчисленное количество раз я решал другие проблемы C++. Но этот вопрос включает только базовые вещи, и все же я не понимаю, что это значит. –