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

У меня есть класс 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, чтобы делать определенные вещи.

2

Другие решения

Других решений пока нет …