No es una mala práctica. Lo mejor de C++ es que te permite programar en muchos estilos. Esto le da al lenguaje una gran flexibilidad y utilidad, pero posiblemente hace que aprender sea más complicado que otros lenguajes que le obligan a escribir código en un estilo particular.
Si tiene un programa pequeño, puede escribirlo en una función, posiblemente usando un par de goto para el flujo de código.
Cuando creces, dividir el código en funciones ayuda a organizar las cosas.
Más grande aún, y las clases son generalmente una buena forma de agrupar funciones relacionadas que funcionan en un cierto conjunto de datos.
Aún más grande, los espacios de nombres ayudan.
A veces, sin embargo, es más fácil escribir una función para hacer algo. Este es a menudo el caso donde se escribe una función que solo funciona en tipos primitivos (como int). int no tiene una clase, por lo que si desea escribir una función printInt(), puede hacerlo de forma independiente. Además, si una función funciona en objetos de múltiples clases, pero en realidad no pertenece a una clase ni a la otra, podría tener sentido como una función independiente. Esto sucede mucho cuando escribe operadores, como definir menos que para poder comparar objetos de dos clases diferentes. O bien, si una función se puede escribir en términos de métodos públicos de una clase, y no necesita acceder directamente a los datos de la clase, algunas personas prefieren escribir eso como una función independiente.
Pero, en realidad, la elección es suya. Cualquier cosa que sea más simple de hacer para resolver su problema es lo mejor.
Puede iniciar un programa como solo unas pocas funciones y luego decidir que algunas están relacionadas y refactorizarlas en una clase. Pero, si las otras funciones independientes no encajan naturalmente en una clase, no es necesario forzarlas en una.
¿quiere decir encabezados sin clase? no estoy seguro de lo que quiere decir con "que no declara una clase", debido a los diferentes usos de "declarar una clase" en la comunidad SO. –
Sí, me refiero a un encabezado sin clase, no estaba seguro de cómo explicarlo. Básicamente es un archivo de encabezado que simplemente tiene un montón de definiciones de funciones. –