DMarlon Studio

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.

C++ · Argumentos por defecto y sobrecarga en DMarlon Studio: el código del ejemplo y su salida en la terminal

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 = valor da 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.