Не существует строгого и быстрого правила, которое всегда должно соблюдаться (если только определенный язык не соблюдает его). Есть веские причины иметь только один класс или иметь несколько классов в файле. И это зависит от языка.
В C # и Java люди склонны придерживаться одного файла на класс.
Я бы сказал, в C ++, хотя я часто помещаю несколько классов в один файл. Часто эти классы маленькие и очень родственные. Например. Один класс для каждого сообщения в некотором протоколе связи. В этом случае файл для каждого из них будет означать много файлов и фактически усложнит обслуживание и чтение кода, чем если бы они были в одном файле.
В C ++ реализация класса отделена от определения класса, поэтому каждый класс {/ body /} меньше, чем в другом языке, и это означает, что классы удобнее измерять для группировки в один файл.
В C ++, если вы пишете библиотеку (например, стандартную библиотеку шаблонов), вы можете поместить все классы в один файл. Пользователям нужно только включить один заголовочный файл, и тогда они получат все классы, чтобы им было легче работать.
Есть баланс. Ответ заключается в том, что легче всего понять и поддерживать. По умолчанию имеет смысл иметь один класс на файл, но существует множество случаев, когда более удобно работать со связанным набором классов, если они определены в одном файле.