Lección 14 · 14 de 20
Argumentos por defecto y sobrecarga · C++
Dé valores por defecto a los parámetros en C++ y escriba varias funciones con el mismo nombre (sobrecarga) que el compilador elige según los argumentos.

Un parámetro puede tener un valor por defecto: double vat = 0.21. Si la llamada lo omite, se usa ese valor (withVat(100) da 121); si lo indica, manda el de la llamada: withVat(100, 0.04), con el IVA de los libros, da 104.
Los parámetros con valor por defecto van al final. greet tiene dos, así que se puede llamar con uno, dos o tres argumentos, pero siempre en orden: para dar times hay que dar también word.
La sobrecarga permite tener varias funciones con el mismo nombre si sus parámetros son distintos. area(4) llama a la del cuadrado, que tiene un parámetro, y area(3, 5), a la del rectángulo, que tiene dos.
El compilador también elige por el tipo: show(42) usa la versión int, show(3.5) la double y show("ready") la de std::string. La elección se hace al compilar, no al ejecutar.
greet y show reciben el texto como const std::string&, como vio en la lección anterior: sin copia y sin cambios.
Código · main.cpp
#include <iostream>#include <string>// Default arguments: used when the call leaves them out.double withVat(double price, double vat = 0.21) { return price * (1 + vat); }void greet(const std::string& name, const std::string& word = "Hello", int times = 1) { for (int i = 0; i < times; i++) std::cout << word << ", " << name << "! "; std::cout << '\n';}// Overloading: the same name with different parameters.double area(double side) { return side * side; } // a squaredouble area(double width, double height) { return width * height; } // a rectanglevoid show(int value) { std::cout << "int: " << value << '\n'; }void show(double value) { std::cout << "double: " << value << '\n'; }void show(const std::string& text) { std::cout << "string: \"" << text << "\"\n"; }int main() { std::cout << "Shoes: " << withVat(100) << '\n'; // vat = 0.21 std::cout << "Book: " << withVat(100, 0.04) << '\n'; // vat = 0.04 greet("Carmen"); greet("Carmen", "Good morning"); greet("Leo", "Hi", 3); // The compiler picks the version that matches the arguments. std::cout << "Square 4 m: " << area(4) << " m2, room 3 x 5 m: " << area(3, 5) << " m2\n"; show(42); show(3.5); show("ready"); return 0;}Salida · c++ -std=c++17 main.cpp -o main && ./main
Shoes: 121 Book: 104 Hello, Carmen! Good morning, Carmen! Hi, Leo! Hi, Leo! Hi, Leo! Square 4 m: 16 m2, room 3 x 5 m: 15 m2 int: 42 double: 3.5 string: "ready"
Para recordar
tipo p = valorda un valor por defecto a un parámetro.- Los parámetros con valor por defecto van al final.
- Sobrecarga: el mismo nombre con parámetros distintos.
- El compilador elige la versión por el número y el tipo de los argumentos.
Ejercicio
Añada una sobrecarga void show(char letter) y llámela con show('A'). Después, dé a withVat un tercer parámetro int units = 1 y calcule el precio de tres pares de zapatos.