Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/05098.jsonl.gz/39

El C y el C++ por default pasan argumentos a una función con una llamada por medio del valor de dichos argumentos (call by value). De esta forma la función se sirve de una copia del argumento y no lo modifica. Como se ha visto en capítulos anteriores, para que una función pueda alterar el valor de la variable utilizada como argumento, es indispensable que los parámetros sean declarados explícitamente como punteros y que la función opere sobre los mismos por medio del operador puntero (pointer) *.
Las variables utilizadas para llamar a la función cambia() deben estar precedidas por el operador de dirección & (address operator) para generar un puntero a cada argumento. Así se genera una llamada por referencia o dirección (call by reference). El C++, en cambio, preve un método más claro y transparente mediante el llamado parámetro de referencia.
En C++ es posible indicar al compilador que genere la llamada automática a una función por referencia en lugar de por valor. Para ello es suficiente anteponer al nombre del parámetro en la declaración de la función el operador de referencia &. El ejemplo anterior modificado sería:
Aunque el objetivo principal del operador de referencia es el de permitir la transferencia de parámetros a la función por referencia, es posible también declarar variables de referencia.
Una variable de referencia debe apuntar a un objeto, y es indispensable inicializarla en el momento de la declaración. En general esto significa asignar a la variable la dirección de otra variable precedentemente declarada. De esta forma la variable referencia puede ser siempre utilizada allí donde se pudiera utilizar la variable a la que se refiere. Vamos un ejemplo:
El C se vale de las funciones malloc() y free() para reservar y liberar memoria respectivamente. Con tal propósito el C++ está provisto de dos operadores new y delete que efectúan esta operación de una manera más elegante.
Los operadores new y delete actúan en estrecha colaboración. Por esto motivo la liberación de memoria por medio de delete requiere que el puntero haya sido inicializado con new. La incorrecta utilización de delete puede originar serios problemas tanto el programa como en el sistema.
El polimormismo en C++ se consigue además de con la sobrecarga de operadores con la sobrecarga de funciones.
En C++ dos o más funciones pueden tener el mismo nombre siempre que la declaración de parámetros sea diferente. En tales circunstancias el compilador distingue entre una u otra función por el tipo de sus parámetros.
El C++ admite que una función asigne a un parámetro un valor por defecto si dicho parámetro no viene especificado en la llamada. La sintaxis utilizada para indicar el valor de defecto es análoga a la de la inicialización de una variable.