Mètodes
42 (XII): C++, els mòduls
De C a C++: classes, herència, polimorfisme i overload. El canvi de mentalitat després d'un any de C estricta.

42 (XIII): C++, els mòduls
Després d’un any de C estricta, on res no et donen fet i cada byte el gestionen tu, la primera setmana de C++ va ser un xoc estrany: std::cout, std::string, classes que s’inicialitzen soles. Vaig tenir la sensació de fer trampa. Dues hores després, el compilador ja se n’havia encarregat de desfer-me la il·lusió.
El problema
El currículum de C++ a 42 arriba en deu mòduls, cpp00 a cpp09, i no és un curs de sintaxi: és un canvi de mentalitat. A C penses en funcions i en memòria; a C++ dissenyes tipus. I 42, com sempre, posa regles que et forcen a entendre el perquè: res de printf, res de malloc, res dels casts vells. Si feies servir C++, havia de ser C++ de debò: streams, referències, i una forma canònica ortodoxa que tota classe ha de complir —constructor per defecte, constructor de còpia, operador d’assignació i destructor— perquè es pugui copiar i destruir sense sorpreses.
Com ho vaig abordar
Mòdul a mòdul, amb el Makefile com a company de viatge. El 00 va ser classes i la forma canònica. El 01, reserva amb new i la diferència real entre apuntadors i referències. El 02, sobrecàrrega d’operadors: fer que una classe es pugui sumar, comparar i incrementar com si fos un número. El 03, herència, amb la trampa de sempre: què s’hereta i què no. I el 04, el que ho lliga tot: polimorfisme per subtipatge, classes abstractes, i la regla que més m’ha marcat —el destructor ha de ser virtual, perquè si esborres un objecte derivat a través del seu pare, sense virtual no s’allibera tot. Al repositori els meus mòduls arriben fins aquí; els últims, de plantilles i contenidors, els vaig treballar amb material de referència al costat.
Què n’he après
Que el C de l’any anterior no va ser un llast: se sap què fa un std::string per dins quan has escrit tu el gestionari de memòria. Que les referències no són apuntadors amb modals: són àlies amb restriccions, i aquestes restriccions són el que els dona valor. Que heretar és fàcil, però el polimorfisme —una interfície comuna que es comporta segons el tipus real— és tot el punt del disseny orientat a objectes. I que ara un missatge d’error del compilador de C++ de tres línies em sap bé: em diu que el tipus m’està protegint d’un bug que a C hauria sortit a les tres de la matinada.