(кроме простых вспомогательных классов) поместите по одному классу в каждый файл cpp / h и назовите файлы cpp / h такими же, как у класса.
Группируйте связанные файлы классов в папки (вы можете по желанию использовать иерархию пространств имен, которые соответствуют структуре папок. Подход .net здесь заключается в использовании пространства имен CompanyName.ProductName, при этом ваши файлы хранятся в проекте / подпапке ProductName вашей решение). Например, вы можете сгруппировать классы Math, I / O и Drawing в отдельные папки «подсистем».
В идеале, превратить эти отдельные разделы в библиотеки многократного использования (MyCompany.Math). Вы будете рады этому позже, когда захотите разработать новый продукт, который поделится частью кода. В этом случае «папки» верхнего уровня сами по себе становятся отдельными проектами, и вы можете начать работу по минимизации зависимостей между ними, чтобы реализовать, а затем реализовать гораздо лучший общий дизайн структуры в вашей кодовой базе.
Идеально в папках найти хороший баланс между беспорядком и разреженностью - старайтесь сбалансировать папки так, чтобы в них было по 5-15 файлов в каждой. Если меньше, рассмотрите возможность объединения папок; если больше, рассмотрите возможность добавления папок подкатегорий, чтобы уменьшить сложность.
Пока ваши классы / файлы и пространства имен / папки имеют хорошие описательные имена и ваши папки логически структурированы, вы можете сделать очень большой проект очень простым для навигации.
Рискуя начать религиозную войну, я предпочитаю помещать заголовки и их исходные файлы в одну папку, чтобы при редактировании .cpp файл .h был легко доступен, а не перемещаться вверх и вниз по папка все время.