¿Deben declararse las funciones / variables de clase antes de ser utilizadas?

Así que estaba aprendiendo sobre las clases y tropecé con algo que encontré que era bastante incómodo para mí.

class Nebla 
{
    public:
        int test()
        {
            printout();
            return x;
        }

        void printout()
        {
            printout2();
        }

    private:
        int x,y;
        void printout2()
        {
            cout<<"Testing my class";
        }
};

Encontré que en una clase puedo usar funciones antes de declararlas (prototipo)

Puedes ver que utilicéprintout() , printout2() antes de la decleración.

Y puedo usar variables también antes de declararlas.

Puedes ver que hicereturn x; Antes de declarar x.

¿Por qué puedo usar funciones y variables en clases antes de la declaración pero fuera de la clase si hago eso, me sale un error?

Gracias

Respuestas a la pregunta(4)

Su respuesta a la pregunta