APP下载

C++的函数重载剖析

2014-11-06庞新法

价值工程 2014年25期
关键词:调用程序设计个数

庞新法

(陕西省委党校科技教研部,西安710061)

1 绪论

在C语言中,两个函数的名称不能相同,否则会导致编译错误。而在C++中,函数名相同而参数不同的两个函数被解释为重载。使用函数重载可以帮助程序员应付更多的复杂性,避免了使用繁杂的函数名称。C++可以对不同功能赋予相同的函数名,函数调用时,由编译程序根据上下文(实参的类型,个数)理解确定调用哪一个,以方便用户管理和使用函数名。

自然语言中的“一词多义”,反映到程序中就是重载。

例1通过重载求a的绝对值

2 匹配重载函数

C++允许功能相似的函数在相同的作用域内以相同的函数名声明,从而形成重载。那么用户调用同名函数时,编译程序如何确定(匹配)到底调用哪一个函数,称为匹配重载函数。编译时,根据作用域、返回值类型、函数名、形参类型、形参顺序把同名函数转换成不同名函数(用函数内部名),内部函数名构成规则:作用域+返回值类型+函数名+形参列表。匹配重载函数时按以下优先级进行:①精确匹配:参数匹配而不做转换,或只做微不足道的转换。②隐式转换匹配。③自定义匹配。④编译程序寻找匹配函数时,函数的类型不起作用。

2.1 重载函数必须在同一作用域内

int abs(int a),double abs(double a),void main()在同一作用域内,main既可调用int abs(int a),又可调用double abs(double a)。int abs(int a),double abs(double a)是重载函数。

2.2 重载函数具有不同的形参 不同的形参指的是形参类型不同、形参个数不同、形参顺序不同。

①形参类型不同。如int add(int x,int y);float add(float x,float y);

②形参个数不同。如int add(int x,int y);int add(int x,int y,int z);

③形参顺序不同。如float add(int x,float y);float add(float x,int y);

函数 int add(int x,int y)、float add(float x,float y)、int add(int x,int y,int z)、float add(int x,float y)、float add(float x,int y)是重载函数。

例3 void main()

2.3 精确匹配 实参形参个数相同,类型基本一致称为精确匹配。例3均为精确匹配。

2.4 隐式转换匹配

2.5 不同功能的函数不能重载 功能相似的函数,用相同函数名,以增加可读性。功能不同的函数,用不同函数名,便于用户区分,是一个良好的编程风格。

3 成员函数重载

非成员函数可以重载,成员函数也可以重载,只要函数在同一作用域内,满足重载要求即可。如构造函数重载

4 结语

重载函数是面向对象程序设计的关键技术之一,用于命名一组功能相似的函数,这样做减少了函数名的数量,便于程序的阅读。函数重载在类和对象中的应用比较多,在类的多态性中,有更多不同类型的函数重载(运算符重载)。应熟练掌握重载函数,以提高C++编程能力。

[1]钱能.C++程序设计教[M].清华大学出版社,2006.

[2]郑莉.C++语言程序设计[M].清华大学出版社,2002.

[3]杨俊清.C++程序设计[M].西安电子科技大学出版社,2003.

猜你喜欢

调用程序设计个数
怎样数出小正方体的个数
基于Visual Studio Code的C语言程序设计实践教学探索
核电项目物项调用管理的应用研究
等腰三角形个数探索
怎样数出小木块的个数
从细节入手,谈PLC程序设计技巧
LabWindows/CVI下基于ActiveX技术的Excel调用
怎样数出小正方体的个数
基于系统调用的恶意软件检测技术研究
高职高专院校C语言程序设计教学改革探索