论文部分内容阅读
摘要:函数重载机制是C 语言中的关健技术之一,它允许功能相近的函数在相同的作用域内以相同函数名定义,编程中合理的使用函数重载,可以增强程序设计的灵活性、扩充性和可读性。
关键词:函数重载;编译器;覆盖
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)28-0135-02
Application of Function Overloading in C
LIN Yong
(Department of Computer, Shanxi University of Technology, Hanzhong 723001, China)
Abstract: Overloaded function is one of the key technology in C language,which allows name same definition with similar function withinn the same role.Using of overloaded function rationally in programming can enhance the flexibility, Scalability and readability of the process design.
Key words: function overload; Compiling device; Cover
1 引言
相对C语言的函数,C 增加了重载(overloaded)机制。重载机制既可用于全局函数,也可用于类的成员函数。函数的重载也称多态函数,对于没有重载机制的C语言,每个函数必须有其不同于其它函数的名称,即使操作是相同的,仅仅数据的类型不同,也需要定义名称完全不同的函数,这样就显得重复且效率低,而具有重载机制的C 语言,允许功能相近的函数在相同的作用域内以相同函数名定义,因而使函数方便使用,便于记忆,也使程序设计更加灵活。
基于C 相对于C语言的重载的优点,合理的使用重载,将大大地提高程序的运行效率和代码的可读性。
2 重载的概念
在C 程序中,可以将语义、功能相似的几个函数用同一个名字表示,即函数重载。这样便于记忆,提高了函数的易用性。例如下面的函数EatBeef,EatFish,EatChicken可以用同一个函数名Eat表示,用不同类型的参数加以区别。
void EatBeef(…);// 可以改为 void Eat(Beef …);
void EatFish(…);// 可以改为 void Eat(Fish …);
void EatChicken(…); // 可以改为 void Eat(Chicken …);
3 重载实现的原理
几个同名的重载函数仍然是不同的函数,如何区分它们呢?我们自然想到函数接口的两个要素:参数与返回值。如果同名函数的参数不同(包括类型、顺序不同),那么它们是不同的函数;如果同名函数仅仅是返回值类型不同,有时可以区分,有时却不能。例如:
void Function(void);
int Function (void);
上述两个函数,第一个没有返回值,第二个的返回值是int类型。如果有调用函数语句:int x = Function();则可以判断出Function是第二个函数。但在C /C程序中,可以忽略函数的返回值。在这种情况下,编译器和程序员就不知道哪个Function函数被调用。所以只能靠参数而不能靠返回值类型的不同来区分重载函数。编译器根据参数为每个重载函数产生不同的内部标识符。
但并不是两个函数的名字相同就能构成重载。全局函数和类的成员函数同名不算重载,因为函数的作用域不同。例如:
void Print(…);// 全局函数
class A
{…
void Print(…); // 成员函数
}
不论两个Print函数的参数是否不同,如果类的某个成员函数要调用全局函数Print,为了与成员函数Print区别,全局函数被调用时应加‘::’标志。例如:
::Print(…); // 表示Print是全局函数而非成员函数
4 函数重载的实现
4.1 非成员函数重载
非成员函数重载是C 过程性部分,形式有:
1) 重载函数使用不同类型的参数,例如:
int min(int x,int y) {return x double min(int x,int y) {return x 在调用过程中,C 编译器将根据调用式中实参的类型决定调用哪一个重载函数,如函数调用min(2,3),编译器将调用执行时代码定到第一个函数体上,而函数调用min(2.5,3.5)就被被编译器定到第二个函数体上。
2) 重载函数中使用不同数目的参数,例如:
int min(int x,int y) {return x int min(int x,int y,int z)
{int t=x trturn t C 编译器将根据函数调用表达式中实参的个数,对于调用min(10,20)编译器确定调用执行代码是一个重载函数的函数体,对于调用min(10,20,30)编译器确定调用执行代码是第二个重载函数的函数体。
因此,在C 中,利用重载机制把调用重载工作交给编译器大大提高了程序的灵活性和扩展性。
4.2 成员函数重载
C 类部分,类中的成员函数也可以被重载,有下面两种方式:
1) 类成员函数重载
#include
class List//实现一个List类
{float x,y;
public:
List() {x=0.0;y=0.0;}
List(float x1,float y1) //重载构造函数
{x=x1;y=y1;}
void set(float m,float n)
{List::x=m;
List::y=n;}
void set(List
关键词:函数重载;编译器;覆盖
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)28-0135-02
Application of Function Overloading in C
LIN Yong
(Department of Computer, Shanxi University of Technology, Hanzhong 723001, China)
Abstract: Overloaded function is one of the key technology in C language,which allows name same definition with similar function withinn the same role.Using of overloaded function rationally in programming can enhance the flexibility, Scalability and readability of the process design.
Key words: function overload; Compiling device; Cover
1 引言
相对C语言的函数,C 增加了重载(overloaded)机制。重载机制既可用于全局函数,也可用于类的成员函数。函数的重载也称多态函数,对于没有重载机制的C语言,每个函数必须有其不同于其它函数的名称,即使操作是相同的,仅仅数据的类型不同,也需要定义名称完全不同的函数,这样就显得重复且效率低,而具有重载机制的C 语言,允许功能相近的函数在相同的作用域内以相同函数名定义,因而使函数方便使用,便于记忆,也使程序设计更加灵活。
基于C 相对于C语言的重载的优点,合理的使用重载,将大大地提高程序的运行效率和代码的可读性。
2 重载的概念
在C 程序中,可以将语义、功能相似的几个函数用同一个名字表示,即函数重载。这样便于记忆,提高了函数的易用性。例如下面的函数EatBeef,EatFish,EatChicken可以用同一个函数名Eat表示,用不同类型的参数加以区别。
void EatBeef(…);// 可以改为 void Eat(Beef …);
void EatFish(…);// 可以改为 void Eat(Fish …);
void EatChicken(…); // 可以改为 void Eat(Chicken …);
3 重载实现的原理
几个同名的重载函数仍然是不同的函数,如何区分它们呢?我们自然想到函数接口的两个要素:参数与返回值。如果同名函数的参数不同(包括类型、顺序不同),那么它们是不同的函数;如果同名函数仅仅是返回值类型不同,有时可以区分,有时却不能。例如:
void Function(void);
int Function (void);
上述两个函数,第一个没有返回值,第二个的返回值是int类型。如果有调用函数语句:int x = Function();则可以判断出Function是第二个函数。但在C /C程序中,可以忽略函数的返回值。在这种情况下,编译器和程序员就不知道哪个Function函数被调用。所以只能靠参数而不能靠返回值类型的不同来区分重载函数。编译器根据参数为每个重载函数产生不同的内部标识符。
但并不是两个函数的名字相同就能构成重载。全局函数和类的成员函数同名不算重载,因为函数的作用域不同。例如:
void Print(…);// 全局函数
class A
{…
void Print(…); // 成员函数
}
不论两个Print函数的参数是否不同,如果类的某个成员函数要调用全局函数Print,为了与成员函数Print区别,全局函数被调用时应加‘::’标志。例如:
::Print(…); // 表示Print是全局函数而非成员函数
4 函数重载的实现
4.1 非成员函数重载
非成员函数重载是C 过程性部分,形式有:
1) 重载函数使用不同类型的参数,例如:
int min(int x,int y) {return x
2) 重载函数中使用不同数目的参数,例如:
int min(int x,int y) {return x
{int t=x
因此,在C 中,利用重载机制把调用重载工作交给编译器大大提高了程序的灵活性和扩展性。
4.2 成员函数重载
C 类部分,类中的成员函数也可以被重载,有下面两种方式:
1) 类成员函数重载
#include
class List//实现一个List类
{float x,y;
public:
List() {x=0.0;y=0.0;}
List(float x1,float y1) //重载构造函数
{x=x1;y=y1;}
void set(float m,float n)
{List::x=m;
List::y=n;}
void set(List