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 parameter
float absolute(float var){
if (var <
0.0)
var = -var;
return var;}
// function with int type parameter
int 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 = 5
Absolute value of 5.5 = 5.5
Example 2: Overloading Using
Different Number of Parameters
#include <iostream>
using
namespace
std;
// function with 2 parameters
void display(int var1, double var2) {
cout <<
"Integer number: " << var1;
cout <<
" and double number: " << var2 <<
endl;}
// function with double type single parameter
void display(double var) {
cout <<
"Double number: " << var <<
endl;}
// function with int type single parameter
void 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: 5
Float number: 5.5
Integer 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.
|