第5讲函数重载和作用域 教学目的与要求: 了解函数的重载的目的。 掌握函数重载的使用,数据的作用域与生存期。 教学内容提要: 1、C++函数重载; 2、C++的作用域与可见性; 3、C++中的编译预处理; 教学重点:函数重载和作用域与可见性。 教学难点:函数重载和作用域与可见性。 教学进度:P31~P35 教学过程:
(51重载函数 函数的重载是指建立多个同名的函数,但函数的形参表必须互不相同。不相 同可是形参个数不同,也可是形参的类型不同,还可两者都不相同。 例如: int fun(int;int) int fun(int); 合法的重载函数 long fun(int, long); long fun (long) 重载函数的返回类型,即函数类型可以相同,也可以不同。如果仅 仅是返回类型不同,而函数名相同、形参表也相同,则是非法的 例如: int fund(mmtb);「不合法的 long fun(int a int b) 例如: int fun(inta,intb);说明:合法的。但不是重载。它只是对同 int fun(int x, int y); 函数原型的多次声明。 函数重载又称函数的多态性。它通过改变形参的个数或类型使 多个函数共用一个函数名
函数的重载是指建立多个同名的函数,但函数的形参表必须互不相同。不相 同可是形参个数不同,也可是形参的类型不同,还可两者都不相同。 例如:int fun(int,int); int fun(int); long fun(int,long); long fun(long); 重载函数的返回类型,即函数类型可以相同,也可以不同。如果仅 仅是返回类型不同,而函数名相同、形参表也相同,则是非法的。 例如:int fun(int a,int b); long fun(int a,int b); 例如:int fun(int a,int b); int fun(int x,int y); 函数重载又称函数的多态性。它通过改变形参的个数或类型使 多个函数共用一个函数名。 合法的重载函数 不合法的 说明:合法的。但不是重载。它只是对同 一函数原型的多次声明。 【 5.1 重载函数】
例5-1使用重载函数 #includesiostream.h> int add(int a, int b) long add(ong a, long b) float add (float a, float b) double add(double a, double b); id (0 i int integer1=100, integer 2=200; long longint1=200L, longint2-=400L float floatdigit1-=5.5f, floatdigit2-=10.6f; double doubledigitl=5.5e22, doubledigit2=4.4e20 cout<< NT: <<endl cout<<add(integer, integer)<<end; cout<<endk<< " LONG: <<endI; cout<<add(longintl, longint2)<<endl
#include<iostream.h> int add(int a,int b); long add(long a,long b); float add(float a,float b); double add(double a,double b); void main() { int integer1=100, integer2=200; long longint1=200L, longint2=400L; float floatdigit1=5.5f, floatdigit2=10.6f; double doubledigit1=5.5e22, doubledigit2=4.4e20; cout<< ″INT: ″<<endl; cout<<add(integer1,integer2)<<endl; cout<<endl<< ″LONG: ″<<endl; cout<<add(longint1,longint2)<<endl;
(3:) cout<<endk<<"FLOAT: "<<endl cout<<add(floatdigitl, floatdigit2)<<endl; cout<<end<</DOUBLE: <<endl cout<<add(doubledigitl, doubledigit2)<<end; int add(int a, int b {cout≤<" In int add(inta,intb)"≤<endl; cout<<a<<+<<b return(a+b); long add(long a, long b) i cout<< "In long add(ong a, long b)<<endl; cout<<a<</+'<<b return(a+b)
cout<<endl<< ″FLOAT: ″<<endl; cout<<add(floatdigit1,floatdigit2)<<endl; cout<<endl<< ″DOUBLE: ″<<endl; cout<<add(doubledigit1,doubledigit2)<<endl; } int add(int a,int b) { cout<< ″In int add(int a,int b) ″<<endl; cout<<a<<′+′<<b<<′=′; return(a+b); } long add(long a,long b) { cout<< ″In long add(long a,long b) ″<<endl; cout<<a<<′+′<<b<<′=′; return(a+b); }
float add(float a, float b) cout<< " In float add(float a, float b)"<<endl; cout<<a<<+<<b<<'= return a+b: Rk double add(double a, double b) cout<< "In double add (double a, double b)"<<endl: cout<<a<<+<<b<< return a+b 注不要将不同功能的函数声明为重载函数,以免出现调用 结果的误解、混淆。这样不好: 当重载的函数带有默认参数时,应该注意避兔二义性