Лучший способ реорганизовать иерархию классов

У меня есть класс 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(); линии?

1 ответ

Решение

Ответ должен быть довольно простым. Вы сказали "много одинаковых вещей, подходящих для CMother". Поэтому вы должны включить их в функцию-член CMother. Так как кажется, что функциональность необходима только классам, производным от CMother, вы должны пометить новую функцию-член "защищенной". То, что сказал @0x5453, является одним из способов; но я бы предложил новую функцию, чтобы оставить открытый метод CMother::Compute в покое. Может быть другой дочерний класс CMother, который не реализует Compute и полагается на CMother::Compute, чтобы делать определенные вещи.

Другие вопросы по тегам