Poner Punto p = 1 es una manera
implícita de llamar a constructor que te ha puesto eferion, es decir equivale a Punto p(1), que a su vez equivale a Punto p(1,0) puesto que el valor de x fue proporcionado (1) x valdrá 1 e y valdrá 0.
Con el fin de evitar que esta conversión implícita existe la palabra reservada
explicit.
Ten en cuenta que poner el operador = en la línea en la que declaras la variable es llamar a un constructor.
Código C++:
Ver originalPunto p; // Reserva de memoria para la estructura
p=0; // operador de asignación =