Overloaded-оптоварена, преклопена функција се добива кога во иста програма се дефинираат неколку функции со исто име, но различни листи на параметри/аргументи.
int myFunction(int x)
float myFunction(float x)
double myFunction(double x, double y)
Следниов
пример има 2 функции за собирање на 2 броја од различен тип
int plusFuncInt(int x, int y) {
return x + y;}
double plusFuncDouble(double x, double y) {
return x + y;}
int main() {
int myNum1 = plusFuncInt(8, 5);
double myNum2 = plusFuncDouble(4.3, 6.26);
cout << "Int: " << myNum1 << "\n";
cout << "Double: " << myNum2;
return 0;
}
Наместо да дефинираме 2 функции ќе работиме со преоптоварени
функции . Во примерот подолу, ја преоптоваруваме функцијата plusFunc за да
работи и за int и за double:
int plusFunc(int x, int y) {
return x + y;}
double plusFunc(double x, double y) {
return x + y;}
int main() {
int myNum1 = plusFunc(8, 5);
double myNum2 = plusFunc(4.3, 6.26);
cout << "Int: " << myNum1 << "\n";
cout << "Double: " << myNum2;
return 0;
}
Кога во иста област на важење има повеќе преклопени функции,
за функциите со исто име освен првата, преведувачот ја толкува декларацијата на
следниов начин:
1. Ако листите на аргументи се разликуваат по типот или по бројот на параметри , функциите се преклопени.
Example 1: Overloading Using Different Types of Parameter
#include <iostream>using namespace std;// function with float type parameterfloat absolute(float var){ if (var < 0.0) var = -var; return var;}// function with int type parameterint absolute(int var) { if (var < 0) var = -var; return var;}int main() { // call function with int type parameter cout << "Absolute value of -5 = " << absolute(-5) << endl; // call function with float type parameter cout << "Absolute value of 5.5 = " << absolute(5.5f) << endl; return 0;}
Output
Absolute value of -5 = 5Absolute value of 5.5 = 5.5
Example 2: Overloading Using
Different Number of Parameters
#include <iostream>using namespace std;// function with 2 parametersvoid display(int var1, double var2) { cout << "Integer number: " << var1; cout << " and double number: " << var2 << endl;}// function with double type single parametervoid display(double var) { cout << "Double number: " << var << endl;}// function with int type single parametervoid display(int var) { cout << "Integer number: " << var << endl;} int main() { int a = 5; double b = 5.5; // call function with int type parameter display(a); // call function with double type parameter display(b); // call function with 2 parameters display(a, b); return 0;}
Output
Integer number: 5Float number: 5.5Integer number: 5 and double number: 5.5
2. Ако типот на функциите и листите на аргументи се идентични, втората декларација ја
смета за повторна декларација на функцијата.
3. Ако листите на аргументи се идентични, а типот
на функциите се различни, втората декларација ја смета за погрешна декларација
на функцијата и се јавува грешка.
| // CPP Program to demonstrate that function overloading // fails if only return types are different #include <iostream> int fun() { return 10; } char fun() { return 'a'; } // compiler error as it is a new declaration of fun() int main() { char x = fun(); return 0; } Output In function ‘char fun()’{ return 'a'; } ^ old declaration ‘int fun()’ int fun() { return 10; } ^ Резиме
Above are the signatures of the different ‘add’ functions. Now let us check which is valid or which is invalid.
|
