Ответ 1
Функции, определенные в определении класса, имеют точно такую же семантику, как если бы они были объявлены только в определении класса и затем определены сразу после определения класса. Единственное отличие состоит в том, что такие функции-члены неявно объявляются встроенными, в то время как определение функции либо не является встроенным, либо явно встроенным. То есть с точки зрения компилятора функции объявляются и класс определяется до определения функций.
Причина для определения функции после определения класса проста: без этого класс будет неполным, и ошибки членов будут терпеть неудачу, что явно нежелательно для определения функций-членов. В качестве побочного эффекта функции могут легко ссылаться друг на друга. Поскольку определение функций-членов в определении класса в первую очередь для удобства, было бы также неудобно требовать объявления для функций-членов, используемых позже.