- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(C++语言程序的设计)第13讲 函数3.ppt
HZAU 理学院计算机系 姚娟 HZAU信息学院计算机应用系 姚娟 * HZAU信息学院计算机系 * C++语言程序设计 第13讲 函数3 * 主要内容 局部变量和全局变量 函数重载 函数模板 * 局部变量和全局变量 局部变量只在函数内部起作用,函数结束时,所占内存空间释放 全局变量在文件中任何地方都起作用 全局变量与局部变量同名时,局部变量优先。 函数的形参视同局部变量 * #includeiostream using namespace std; int y,z; int main() { void abc(int x); int x; x=10; y=20; z=30; coutok1: x=x y=y z=zendl; abc(x); coutok2: x=x y=y z=zendl; return 0; } 例13-1 * void abc(int x) { int y=20; coutok3: x=x y=y z=zendl; x=100; y=200; z=300; coutok4: x=x y=y z=zendl; } * 注意事项 不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。这样不好: int add(int x,int y); int add(int a,int b); 编译器不以形参名来区分 int add(int x,int y); void add(int x,int y); 编译器不以返回值来区分 int add(int x,int y) { return x+y; } float add(float x,float y) { return x-y; } 函 数 重 载 重载函数的形参必须不同:个数不同或类型不同。 编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。 * 例13-2 重载函数应用举例 编写两个名为add的重载函数,分别实现两整数相加、两实数相加的功能。 #includeiostream using namespace std; int add(int m, int n) { return m+n; } double add(double x, double y) { return x+y; } 函 数 重 载 * int main() { int m, n; double x, y; int add(int m, int n); double add(double x, double y); coutEnter two integer: ; cinmn; coutinteger m+n=add(m,n)endl; coutEnter two real number: ; cinxy; coutreal number x+y= add(x,y)endl; return 0; } * * 参数化程序设计 通用的代码就必须不受数据类型的限制,可以把数据类型改为一个设计参数。这种类型的程序设计称为参数化(parameterize) 程序设计。 这种设计由模板(template) 完成。 * 函数模板 函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计。 定义方法: template模板参数表 返回类型 函数名(形式参数表) {……} //函数体 模板参数表中指明的类型参数必须用于函数参数表 * 求绝对值函数的模板 #includeiostream using namespace std; templatetypename T T abs(T x) { if (x0)return –x; else return x; } int main() { int n=-5; double d=-5.5; coutabs(n)endl; coutabs(d)endl; return 0;} class * 求绝对值函数的模板分析 编译器从调用abs()时实参的类型,推导出函数模板的类型参数。例如,对于调用表达式abs(n),由于实参n为int型,所以推导出模板中类型参数T为int。 当类型参数的含义确定后,编译器将以函数模板为样板,生成一个函数:int abs(int x){if (x0)return –x; else return x; } * 例13-3 函数模板和函数重载 #includeiostream using namespace std; templateclass T T max( T a, T b)
文档评论(0)