У Вас вполне хорошее решение. Если Вы хотите чтоб некий метод calculateCarCost вызвался сам, то у Вас это не получится, его нужно вызывать ручками, хотя, если Вас не интересует язык:
class Car
{
protected function A()
{
}
protected function B()
{
}
protected function Calculate()
{
}
public function __call($func, $args)
{
call_user_func_array(array($this, $func), $args);
$this->Calculate();
}
}
Я не знаю есть ли такая возможность в с++, но сут в том что методы вызываются не напрямую а через метод посредник. Хотя в Вашем случае я бы все оставил как есть =)