Surcharge des Fonctions
Objectif:
- Passer des paramètres par défaut à une fonction
- Surcharger les fonctions
Énoncé:
1) Ecrire un programme C++ qui permet, à l’aide des fonctions, de calculer la somme de deux ou trois entiers (Utiliser deux méthodes).
Donner trois entiers: 3 9 8
Methode 1:
3 + 9 = 12
3 + 9 + 8 = 20
Methode 2:
3 + 9 = 12
3 + 9 + 8 = 20
2) Refaire la fonction somme sans valeur de retour. (Utiliser 4 méthodes)
3) Ecrire une fonction qui convertit un nombre d’heure, de minutes et de seconds en un nombre de secondes équivalents. Tester la fonction avec les exemples suivants :
Exemple 1 : Heure = 2, Minute = 39, Seconde = 45
Exemple 2 : Heure = 8, Minute = 26
Exemple 3 : Heure = 5
Exemple 4 : Heure = 3, Seconde = 19
Exemple 1 : 2h 39min 45s = 9585 secondes
Exemple 2 : 8h 26min = 30360 secondes
Exemple 3 : 5h = 18000 secondes
Exemple 4 : 3h 19s = 10819 secondes
Seul le paramètre Heure qui sera obligatoire.
Question 1: Fonction Somme avec deux méthodes
//Programme : Surcharge des Fonctions - Fonctions Somme //Auteur : IDMANSOUR //Copyright : Exelib.net #include<iostream> using namespace std; //Methode 1 : Avec paramètre par défaut int somme1(int x, int y, int z=0){ return x+y+z ; } //Methode 2 : Avec surcharge des fonctions int somme2(int x, int y, int z){ return x+y+z; } int somme2(int x, int y){ return x+y; } int main(){ int a, b, c; cout << "Donner trois entiers: "; cin >> a >> b >> c; cout << "Methode 1: " << endl; cout << a << " + " << b << " = " << somme1(a,b) << endl; cout << a << " + " << b << " + " << c << " = " << somme1(a,b,c) << endl; cout << "Methode 2: " << endl; cout << a << " + " << b << " = " << somme2(a,b) << endl; cout << a << " + " << b << " + " << c << " = " << somme2(a,b,c) << endl; return 0; }
Les fonctions des deux méthodes ne peuvent pas avoir le même nom puisque la fonction somme1 a le même type et même nombre de paramètres que les fonctions somme2
Question 2: Procédure Somme avec quatre méthodes
//Programme : Surcharge des Fonctions - Procédures Somme //Auteur : IDMANSOUR //Copyright : Exelib.net #include<iostream> using namespace std; int som; //Méthode 1 void somme(int x, int y, int &s) { s = x + y ; } //Méthode 2 void somme(int x, int y, int *s) { *s = x + y; } //Méthode 3 void somme(int x, int y) { cout << x + y << endl; } //Méthode 4 void somme4(int x, int y) { som = x + y; } int main() { int a, b, r; cout<<"Donner deux entiers: "; cin >> a >> b; //Methode 1 somme(a, b, r); cout <<a<<"+"<<b<<"="<<r<<endl; //Methode 2 somme(a, b, &r); cout <<a<<"+"<<b<<"="<<r<<endl; //Methode 3 cout<<a<<"+"<<b<<"="; somme(a, b); //Methode 4 somme4(a, b); cout<<a<<"+"<<b<<"="<<som; }
Méthode 1: Utilise un passage par référence de la variable qui va contenir le résultat;
Méthode 2: Utilise un passage par adresse de la variable qui va contenir le résultat;
Méthode 3: Consiste à afficher le résultat dans la procédure;
Méthode 4: Utilise une variable globale qui peut être accessible dans le main
La fonction de la méthode 4 a la même signature (même nombre et type de paramètres) que celle de la méthode 3, c'est pour cela elle ne peut pas avoir le même nom (somme)
Question 3: Conversion d'une horloge en secondes
//Programme : Surcharge des Fonctions - Conversion en secondes //Auteur : IDMANSOUR //Copyright : Exelib.net #include<iostream> using namespace std; int convertirSecondes(int h, int min = 0, int s = 0){ return (h * 60 + min) * 60 + s; } int main(){ cout << "Exemple 1 : 2h 39min 45s = " << convertirSecondes(2, 39, 45) << " secondes" << endl; cout << "Exemple 2 : 8h 26min = " << convertirSecondes(8, 26) << " secondes" << endl; cout << "Exemple 3 : 5h = " << convertirSecondes(5) << " secondes" << endl; cout << "Exemple 4 : 3h 19s = " << convertirSecondes(3, 0, 19) << " secondes" << endl; return 0; }