У меня есть класс 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». Поэтому вы должны включить их в функцию-член CMother. Так как кажется, что функциональность необходима только классам, производным от CMother, вы должны пометить новую функцию-член «защищенной». То, что сказал @ 0x5453, является одним из способов; но я бы предложил новую функцию, чтобы оставить открытый метод CMother :: Compute в покое. Может быть другой дочерний класс CMother, который не реализует Compute и полагается на CMother :: Compute, чтобы делать определенные вещи.
Других решений пока нет …