Не могу понять от куда берутся веса? И как они распределяются по сети,
Вообще-то , это основа того, что называется "нейронная сеть". Поиск весов и их "распределение по сети" - по сути, это задача оптимизации, решаемая одним из численных методов, как правило - градиентной оптимизацией.
Если вы задаете такой вопрос - это значит, что вы еще совсем "не в теме". Начините с азбуки, потом - когда поймете как оно все работает - можно будет думать и о том, как оно применяется при "распознавании рукописных цифр", а уж потом - как его реализовать на С++. Хотя зачем? Именно на плюсах уже реализованы те-же Tensorflow и PyTorch. Хотите им составить конкуренцию?