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
- 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.
- 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
- 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.
- 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.
Curs de Programació en C++
Mòdul 1: Introducció al C++
- Introducció al C++
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Entrada i Sortida
Mòdul 2: Estructures de Control
Mòdul 3: Funcions
- Introducció a les Funcions
- Paràmetres de Funció i Tipus de Retorn
- Sobrecàrrega de Funcions
- Recursivitat
Mòdul 4: Arrays i Strings
Mòdul 5: Punteres i Referències
- Introducció als Punteres
- Aritmètica de Punteres
- Punteres i Arrays
- Referències
- Assignació Dinàmica de Memòria
Mòdul 6: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Constructors i Destructors
- Herència
- Polimorfisme
- Encapsulació i Abstracció
Mòdul 7: Temes Avançats
- Plantilles
- Gestió d'Excepcions
- Entrada/Sortida de Fitxers
- Biblioteca de Plantilles Estàndard (STL)
- Expressions Lambda
- Multifil