Требуется ли ClassC.hpp содержимое ClassA.hpp, игнорируя в данный момент ClassB.hpp?
Если это так, то да, вы должны включить его, а не полагаться на случайное включение, которое может измениться. Проверить это и настроить правильные включения должно быть относительно просто. Использование другого файла или поведения, которое может измениться позже, является плохой практикой и не должно использоваться.
Редактировать: В случае наследования, к которому относится вопрос, все немного по-другому. Это тот случай, когда вы можете полагаться на B, требующий A, и можно сказать, что вы напрямую не полагаетесь на A (если B изменен на наследование от Q, C больше не может нуждаться в A). Вы хотите посмотреть, от чего зависит заголовок или класс, и включить файл, обеспечивающий это. Если оно напрямую зависит от чего-либо, включите его напрямую.
Включение заголовка несколько раз может быть сделано безвредным с использованием средств защиты заголовков и очень распространено в больших кодовых базах.