如果我们创建两个或多个具有相同名称但参数数量或类型不同的成员,则称为C++重载。在C++中,我们可以重载:
这是因为这些成员仅具有参数。
函数重载定义为具有两个或多个具有相同名称但参数不同的函数的过程,在C++中称为函数重载。在函数重载中,通过使用不同类型的参数或不同数量的参数来重新定义函数。只有通过这些差异,编译器才能区分函数。
函数重载的优点是它可以提高程序的可读性,因为您无需为同一操作使用不同的名称。
让我们看一下函数重载的简单示例,其中我们要更改add()方法的参数数量。
//当参数数量变化时函数重载程序。
#include <iostream> using namespace std; class Cal { public: static int add(int a,int b){ return a + b; } static int add(int a, int b, int c) { return a + b + c; } }; int main(void) { Cal C; // 类对象声明。 cout<<C.add(10, 20)<<endl; cout<<C.add(12, 20, 23); return 0; }
输出:
30 55
让我们看一个简单的示例,其中参数的类型有所不同。
//使用不同类型的参数进行函数重载的程序。
#include<iostream> using namespace std; int mul(int,int); float mul(float,int); int mul(int a,int b) { return a*b; } float mul(double x, int y) { return x*y; } int main() { int r1 = mul(6,7); float r2 = mul(0.2,3); std::cout << "r1 is : " <<r1<< std::endl; std::cout <<"r2 is : " <<r2<< std::endl; return 0; }
输出:
r1 is : 42 r2 is : 0.6
当编译器无法确定重载函数中要调用哪个函数时,这种情况称为函数重载。
当编译器显示歧义错误时,编译器不会运行该程序。
函数重载的原因:
让我们看一个简单的例子。
#include<iostream> using namespace std; void fun(int); void fun(float); void fun(int i) { std::cout << "Value of i is : " <<i<< std::endl; } void fun(float j) { std::cout << "Value of j is : " <<j<< std::endl; } int main() { fun(12); fun(1.2); return 0; }
上面的示例显示错误" call of overloaded 'fun(double)' is ambiguous"。 fun(10)将调用第一个函数。 fun(1.2)根据我们的预测调用第二个函数。但是,这并不像C++那样引用任何函数,所有浮点常量都被视为double而不是float。如果将float替换为double,该程序将起作用。因此,这是从float到double的类型转换。
让我们看一个简单的例子。
#include<iostream> using namespace std; void fun(int); void fun(int,int); void fun(int i) { std::cout << "Value of i is : " <<i<< std::endl; } void fun(int a,int b=9) { std::cout << "Value of a is : " <<a<< std::endl; std::cout << "Value of b is : " <<b<< std::endl; } int main() { fun(12); return 0; }
上面的示例显示了一个错误"call of overloaded 'fun(int)'"。 fun(int a,int b = 9)可以通过两种方式调用:第一种是通过使用一个参数调用函数(即fun(12)),另一种方法是通过两个参数调用函数,即fun(4,5)。 fun(int i)函数由一个参数调用。因此,编译器无法在fun(int i)和fun(int a,int b = 9)之间进行选择。
让我们看一个简单的例子。
链接:https://www.learnfk.comhttps://www.learnfk.com/c++/cpp-overloading.html
来源:LearnFk无涯教程网
#include <iostream> using namespace std; void fun(int); void fun(int &); int main() { int a=10; fun(a);//error, which f()? return 0; } void fun(int x) { std::cout << "Value of x is : " <<x<< std::endl; } void fun(int &b) { std::cout << "Value of b is : " <<b<< std::endl; }
上面的示例显示了一个错误“call of overloaded 'fun(int&)' is ambiguous”。第一个函数接受一个整数参数,第二个函数接受参考参数作为参数。在这种情况下,编译器不知道用户需要哪个功能,因为fun(int)和fun(int&)之间没有语法上的区别。
运算符重载是一种编译时多态性,其中运算符被重载以为用户定义的数据类型提供特殊含义。运算符重载用于重载或重新定义C++中可用的大多数运算符。它用于对用户定义的数据类型执行操作。例如,C++提供了添加应用于内置数据类型的用户定义数据类型的变量的函数。
return_type class_name : : operator op(argument_list) { //body of the function. }
return_type - 是函数返回的值的类型。
class_name - 是类的名称。
operator op - 是一个运算符函数,其中op是重载的运算符,而operator是关键字。
让我们看一下C++中运算符重载的简单示例。在此示例中,定义了void operator ++()运算符函数(在Test类内部)。
//程序以重载一元运算符++。
#include <iostream> using namespace std; class Test { private: int num; public: Test(): num(8){} void operator ++() { num = num+2; } void Print() { cout<<"The Count is: "<<num; } }; int main() { Test tt; ++tt; //调用函数“void operator ++()” tt.Print(); return 0; }
输出:
The Count is: 10
让我们看一个简单的例子,重载二进制运算符。
//程序以重载二进制运算符。
#include <iostream> using namespace std; class A { int x; public: A(){} A(int i) { x=i; } void operator+(A); void display(); }; void A :: operator+(A a) { int m = x+a.x; cout<<"The result of the addition of two objects is : "<<m; } int main() { A a1(5); A a2(4); a1+a2; return 0; }
输出:
The result of the addition of two objects is : 9
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)