函数重载(C++)
面向对象编程是一种基本的编程方法,有助于使用模块化的方法开发程序。这种方法将数据视为主要元素。数据被附加或链接到一个对其采取行动和操作的函数。其他函数不能沉迷于修改这些数据。这些函数只作用于那些与之相连的数据元素。这个数据元素和函数的整体集合被认为是一个对象。
对象是面向对象编程(OOP)的特征之一。本文通过函数重载的概念介绍了OOP的另一个特点--多态性。
函数重载中的多态性
多态性是指在某些给定条件下出现不同的形式。在计算机领域,多态性是面向对象编程的一个属性,其中一个函数可以根据参数的数量和它们的数据类型采取不同的形式。所有的函数都有相同的名字,但它们的参数不同。
**注意:**函数重载与返回类型无关。两个具有相同返回类型的函数,当且仅当它们的参数类型和参数数量不同时,才有资格成为函数重载。
函数重载的必要性
当用户以不同的名字声明不同的函数时,必须为每个函数进行调用。但在函数重载中,函数只能被调用一次。编译器通过对比参数来解决相关函数。
- 程序执行得更快。
- 代码的流程是流畅和简单的。
- 处理和保存代码很容易。
- 代码变得更短,因此容易解释和理解。
- 现实世界的对象和代码之间的接口增强了理解力。
重载函数的区别
例子1
int demo(int a, int b);
int demo(int c, int d, int e);
这里,函数的名字是demo()。有两个名字相同的函数。但是,它们的参数列表不同。这是一个参数数量不同的重载函数的例子。
例2
int demo(int a, int b);
int demo(float c, float d);
这里,函数的名字是demo()。有两个同名的函数。但是,它们在使用的参数类型上有所不同。这是一个用不同数据类型的参数进行函数重载的例子。
我们可以混合和匹配参数的数量和使用的数据类型,只要没有两个函数的参数列表相同,就没有关系。
**注意:**如果在函数名称前没有提到返回类型,则被认为是无效函数(即不返回任何值的函数)。
演示函数重载的C++程序
考虑计算3个几何图形,即圆形、方形和矩形的面积的程序。3个函数将被定义为同名的area()。但它们的参数数量和类型将是不同的。
#include<iostream>
#include<conio.h>
using namespace std;
class demo
{
public:
double area(double r)
{
return (3.142*r*r);
}
int area(int a)
{
return (a*a);
}
double area(double l, double b)
{
return (l*b);
}
};
int main()
{
demo d;
cout<<"Area of the Circle is: "<<d.area(2.5)<<"sq.units"<<"\n";
cout<<"Area of the Square is: "<<d.area(5)<<"sq.units"<<"\n";
cout<<"Area of the Rectangle is: "<<d.area(3,7.8)<<"sq.units"<<"\n";
getch();
}
在这里,我们创建了一个名为demo的类。所有的函数和数据元素都只限于这个类本身。
三个函数被定义在公共领域内。所有的函数都有相同的名字,但它们的参数列表是不同的。这使得函数**demo()被重载。这个类是公开派生的。因此,尽管这些函数是在main()**函数之外定义的,但它们可以从内部被调用(或叫)。
这些函数是在main函数中声明的,相关的值是通过函数声明本身传递的。这种类型的传递方式被称为按值调用法。另一种方法是通过引用调用的方法,在程序运行期间插入值。
上述程序的输出是。
Area of the Circle is: 19.6375sq.units
Area of the Square is: 25sq.units
Area of the Rectangle is: 23.4sq.units
内联函数
有些函数在类的内部和外部都有定义。有一个这样的函数被定义在类的内部。这就是 "内联函数"。
内联函数是一个简短的函数。正如其名称本身所述,函数的调用被函数的主体所取代。该函数是一个程序的内联主函数。要使用这个函数,必须在函数定义前写上关键字inline。它应该被定义在调用它的函数之前。
展示内联函数的C++程序
考虑这个程序来计算圆的面积。函数将以area() 的名字定义。但这里的函数是与主函数联机的。
#include<iostream>
#include<conio.h>
using namespace std;
inline double area(double r)
{
return (3.142*r*r);
}
int main()
{
double a;
a=area(2.5);
cout<<"Area of the Circle is: "<<a<<"sq.units"<<"\n";
getch();
}
这里,关键字inline表示该函数是一个内联函数。当函数area()被调用时,编译器会将函数调用area(2.5)替换为函数本身的主体。然后,结果被存储在变量a中。
**注意:**内联函数对递归或循环结构不起作用。
上述程序的输出是。
Area of the Circle is: 19.6375sq.units