La sobrecàrrega de funcions és una característica del C++ que permet definir múltiples funcions amb el mateix nom però amb diferents signatures. Això significa que les funcions poden tenir el mateix nom sempre que tinguin un nombre diferent de paràmetres o tipus de paràmetres diferents. Aquesta característica és molt útil per simplificar el codi i fer-lo més llegible.

Conceptes Clau

  1. Signatura de la Funció: La signatura d'una funció inclou el nom de la funció i la llista de paràmetres (tipus i nombre de paràmetres). No inclou el tipus de retorn.
  2. Resolució de Sobrecàrrega: El compilador decideix quina funció cridar basant-se en la signatura de la funció.

Exemples Pràctics

Exemple 1: Sobrecàrrega Bàsica

#include <iostream>
using namespace std;

// Funció per sumar dos enters
int suma(int a, int b) {
    return a + b;
}

// Funció per sumar dos nombres de punt flotant
double suma(double a, double b) {
    return a + b;
}

int main() {
    int resultat1 = suma(5, 3); // Crida a suma(int, int)
    double resultat2 = suma(2.5, 3.7); // Crida a suma(double, double)

    cout << "Resultat de suma(5, 3): " << resultat1 << endl;
    cout << "Resultat de suma(2.5, 3.7): " << resultat2 << endl;

    return 0;
}

Exemple 2: Sobrecàrrega amb Diferent Nombre de Paràmetres

#include <iostream>
using namespace std;

// Funció per sumar dos enters
int suma(int a, int b) {
    return a + b;
}

// Funció per sumar tres enters
int suma(int a, int b, int c) {
    return a + b + c;
}

int main() {
    int resultat1 = suma(5, 3); // Crida a suma(int, int)
    int resultat2 = suma(1, 2, 3); // Crida a suma(int, int, int)

    cout << "Resultat de suma(5, 3): " << resultat1 << endl;
    cout << "Resultat de suma(1, 2, 3): " << resultat2 << endl;

    return 0;
}

Exercicis Pràctics

Exercici 1: Sobrecàrrega de Funcions per Multiplicar

Crea una funció multiplica que estigui sobrecarregada per multiplicar dos enters, dos nombres de punt flotant i tres enters.

Solució

#include <iostream>
using namespace std;

// Funció per multiplicar dos enters
int multiplica(int a, int b) {
    return a * b;
}

// Funció per multiplicar dos nombres de punt flotant
double multiplica(double a, double b) {
    return a * b;
}

// Funció per multiplicar tres enters
int multiplica(int a, int b, int c) {
    return a * b * c;
}

int main() {
    int resultat1 = multiplica(5, 3); // Crida a multiplica(int, int)
    double resultat2 = multiplica(2.5, 3.7); // Crida a multiplica(double, double)
    int resultat3 = multiplica(1, 2, 3); // Crida a multiplica(int, int, int)

    cout << "Resultat de multiplica(5, 3): " << resultat1 << endl;
    cout << "Resultat de multiplica(2.5, 3.7): " << resultat2 << endl;
    cout << "Resultat de multiplica(1, 2, 3): " << resultat3 << endl;

    return 0;
}

Exercici 2: Sobrecàrrega de Funcions per Concatenar Strings

Crea una funció concatena que estigui sobrecarregada per concatenar dos strings i tres strings.

Solució

#include <iostream>
#include <string>
using namespace std;

// Funció per concatenar dos strings
string concatena(string a, string b) {
    return a + b;
}

// Funció per concatenar tres strings
string concatena(string a, string b, string c) {
    return a + b + c;
}

int main() {
    string resultat1 = concatena("Hola, ", "món!"); // Crida a concatena(string, string)
    string resultat2 = concatena("Bon ", "dia, ", "món!"); // Crida a concatena(string, string, string)

    cout << "Resultat de concatena(\"Hola, \", \"món!\"): " << resultat1 << endl;
    cout << "Resultat de concatena(\"Bon \", \"dia, \", \"món!\"): " << resultat2 << endl;

    return 0;
}

Errors Comuns

  1. Tipus de Retorn Diferents: La sobrecàrrega de funcions no es pot basar només en el tipus de retorn. Les funcions han de tenir diferents signatures.
  2. Ambigüitat: Si dues funcions tenen signatures que poden ser interpretades de manera similar pel compilador, es produirà un error d'ambigüitat.

Resum

La sobrecàrrega de funcions és una tècnica poderosa en C++ que permet definir múltiples funcions amb el mateix nom però amb diferents signatures. Això ajuda a simplificar el codi i fer-lo més llegible. Hem vist com crear funcions sobrecarregades amb diferents tipus i nombres de paràmetres, i hem practicat amb exercicis per reforçar aquests conceptes.

© Copyright 2024. Tots els drets reservats