11: Las referencias y el constructor de copia

Tabla de contenidos

11.1. Punteros en C++
11.2. Referencias en C++
11.3. El constructor de copia
11.4. Punteros a miembros
11.5. Resumen
11.6. Ejercicios

Las referencias son como punteros constantes que el compilador de-referencia automáticamente.

Aunque las referencias también existen en Pascal, la versión de C++ se tomó del lenguaje Algol. Las referencias son esenciales en C++ para ayudar en la sintaxis de los operadores sobrecargados (vea el capítulo 12) y, además, son una buena forma para controlar la manera en que los argumentos se pasan a las funciones tanto hacia dentro como hacia fuera.

En este capítulo primero verá la diferencia entre los punteros en C y en C++, y luego se presentarán las referencias. Pero la mayor parte del capítulo ahondará en el asunto un tanto confuso para los programadores de C++ novatos: el constructor de copia, un constructor especial (que usa referencias) y construye un nuevo objeto de otro ya existente del mismo tipo. El compilador utiliza el constructor de copia para pasar y retornar objetos por valor a las funciones.

Finalmente, se hablará sobre la característica (un tanto oscura) de los punteros-a-miembro de C++.

11.1. Punteros en C++

La diferencia más importante entre los punteros en C y en C++ es que los de C++ están fuertemente tipados. Sobre todo en lo que al tipo void * se refiere. C no permite asignar un puntero de un tipo a otro de forma casual, pero permite hacerlo mediante un void *. Por ejemplo,

Bird* b;
Rock* r;
void* v;
v = r;
b = v;

A causa de esta «característica» de C, puede utilizar cualquier tipo como si de otro se tratara sin ningún aviso por parte del compilador. C++ no permite hacer esto; el compilador da un mensaje de error, y si realmente quiere utilizar un tipo como otro diferente, debe hacerlo explícitamente, tanto para el compilador como para el lector, usando molde (cast en inglés). (En el capítulo 3 se habló sobre la sintaxis mejorada del molde «explícito»).