Comprendo bien C ++ y quiero mejorar mi razonamiento lógico para escribir clases en C ++. ¿Cómo debo comenzar o qué clases / clases STL debo escribir para tener una buena idea del concepto?

Intenta hacer esto. Escriba una clase llamada algo así como file_container , que se puede instanciar así: file_contaner f("somefile.txt"); . Haga de esta clase un contenedor de estilo STL adecuado (con iteradores y demás), para que pueda usar esta clase de esta manera:

total automático = std :: acumular (f.begin (), f.end (), 0);

o así

tamaño_t total = 0;
para (auto & c: f)
total + = tamaño_t (c);

el total debe contener la suma de todos los bytes en el archivo. Para hacerlo un poco más difícil, suponga que no puede cargar el archivo completamente en la memoria. Digamos que tiene un búfer de solo 100 bytes de longitud. Ejecute este código sobre un archivo enorme, vea cómo funciona. Compruebe si el “total” contendrá el valor correcto (no se desborda y el value_type no está firmado).

Si lo hace, tendrá una muy buena comprensión de STL. Luego intente hacer su código multiproceso. Procese varios archivos al mismo tiempo, o el mismo archivo desde diferentes hilos.

Comenzaría con la interfaz de la clase. ¿Qué propiedades quiero que tengan los objetos de la clase (por ejemplo, funciones y miembros de la clase estática)? Por ejemplo, una clase de cadena ciertamente tendría una propiedad de “longitud”.

– ¿Qué acciones quiero realizar cada vez que se crea un nuevo objeto de la clase (constructores)?

– ¿Qué funciones quiero poner a disposición de los objetos y funciones externas y cuáles quiero ocultar (privado versus público versus protegido)?

– ¿Es la clase similar a cualquier clase existente que tenga disponible (puede considerar la herencia en este caso)?

– ¿Quiero heredar clases para modificar una función de la clase (consideraría hacer que esa función sea virtual para que las clases heredadas la anulen)?

– Finalmente, y muy importante, ¿qué acciones de limpieza quiero que se realicen cada vez que destruya algún objeto de esa clase?

No he tocado C ++ en un tiempo, por lo que puede haber cosas que me equivoqué. Espero que esto ayude.