Elena quiere aprender C++ y como estamos pandemia (what a time to be alive), decide juntarse virtualmente con Pablo en un streaming para hacer un poco de ninonino ninoní de C++.
Github: @elenatorro y @pamarcos
Twitter: @BytesAndHumans y @pablomarc0s
En las distros de Linux Debian-based como Ubuntu,
sudo apt install build-essential
instala tanto gcc, g++, make, bintools y el linker para empezar a funcionar. Luego, echamos a andar make a y funcionar:
make
https://youtu.be/1EQbJcWcpus - https://www.twitch.tv/videos/904598376
Nos presentamos y comentamos que C++ tiene un runtime (aunque pequeño), necesario para ejecutar aplicaciones escritas en C++.
Hacemos el setup de un proyecto sencillo con un Makefile (por favor, no uséis Makefile's en el siglo XXI para proyectos de más de 1 fichero) que utiliza el address y undefined sanitizer para asegurarnos que hacemos acrobacias pero con red de seguridad: https://clang.llvm.org/docs/AddressSanitizer.html
Creamos nuestra primera clase con un miembro y ya.
https://youtu.be/2IRLYfz_k48 - https://www.twitch.tv/videos/922795945
Ampliamos nuestra clase Ninonino
con más miembros. Explicamos lo que son los
constructores (y cuándo debemos usar explicit) y los destructores. Además,
presentamos los valores y métodos estáticos. Para cerrar, hablamos de los
scopes y de que deberíamos usar std::unique_ptr (desde C++11) en vez de raw
pointers para evitar memory leaks.
https://youtu.be/Ag4nsxuk2JU - https://www.twitch.tv/videos/948941528
First things first. Elena se olvida de que es mi cumpleaños y por supuestísimo se lleva el escarnio público merecido :P. Por fin entramos al turrón con la herencia de clases, cómo hacer interfaces. Comentamos qué son los métodos virtuales y para qué sirven. Regla importante: si una clase está pensada para que alguien herede de ella, tenemos que declarar su destructor como virtual.
https://youtu.be/2MfsjLpTIZc - https://www.twitch.tv/videos/966204946
Cerramos la última sesión teórica de C++ explicando herencia múltiple y las movidas que acarrea, como por ejemplo el problema del diamante: https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem
Por fin hablamos de templates, de cómo nos sirve para reutilizar el mismo código para distintos tipos.