为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C++程序设计教程5

2010-07-30 25页 ppt 78KB 15阅读

用户头像

is_472238

暂无简介

举报
C++程序设计教程5nullC++程序设计教程(第二版)C++程序设计教程(第二版)第五章 函数机制 Chapter 5 Function Mechanism 清华大学出版社 钱 能null函数 C++的函数是完成既定任务的功能(过程)体,它涵盖了数学函数和一般过程.所以基于过程编程本质上就是基于函数编程 函数机制 一是指程序运行过程中对函数调用的数据管理和处理过程 二是指编程中函数的使用规范.它包括函数参数的属性和传递规则,函数返回类型的匹配与审查,函数名字的识别原则,函数体效率的选择,函数体中数据的访问权限等 第五...
C++程序设计教程5
nullC++程序设计教程(第二版)C++程序设计教程(第二版)第五章 函数机制 Chapter 5 Function Mechanism 清华大学出版社 钱 能null函数 C++的函数是完成既定任务的功能(过程)体,它涵盖了数学函数和一般过程.所以基于过程编程本质上就是基于函数编程 函数机制 一是指程序运行过程中对函数调用的数据管理和处理过程 二是指编程中函数的使用规范.它包括函数参数的属性和传递规则,函数返回类型的匹配与审查,函数名字的识别原则,函数体效率的选择,函数体中数据的访问权限等 第五章内容第五章内容 函数性质( Function Character ) 指针参数 ( Pointer Parameters ) 栈机制 ( Stack Mechanism ) 函数指针 ( Function Pointers ) main参数 ( The main’s Parameters ) 递归函数 ( Recursive Functions ) 函数重载 ( Function Overload ) 1. 函数性质 ( Function Character )1. 函数性质 ( Function Character )函数:对输入参数负责,埋头做自己的事,最终返回结果 函数组织:通过在函数中进行函数调用来扩展运行的规模,层层叠叠的函数构成树结构 做法:将若干个函数组织成文件,又将若干个文件构成程序的办法来进行编程分工跨越数学函数的C++函数,有四种形态跨越数学函数的C++函数,有四种形态返回类型 func ( 参数列 ) ; 返回类型 func ( ) ; void func ( 参数列表 ) ; void func ( ) ;黑盒原则:函数使用者应关注性能,而少去左右实现细节黑盒原则:函数使用者应关注性能,而少去左右实现细节int cost ( int n, int m ) { return n*10; // 运输n次m斤 } int cost ( int n, int m ) { return m*10; // 运输m次n斤 } // 选择下一个最好的 int cost ( int n, int m ) { return (n>m? m:n)*10; // 保证运输次数最少 }参数传递:形参是对实参的克隆,克隆必须遵守类型匹配规则参数传递:形参是对实参的克隆,克隆必须遵守类型匹配规则void f(Type a); //a为形参 void g(){ Type x; f(x); //x为实参 }a实体x实体复制Type类型Type类型2. 指针参数 ( Pointer Parameters )2. 指针参数 ( Pointer Parameters )传递指针:指针参数也是值传递的,指针值的真正用途是进行数据间访,以达到操作数据块(大小由之)的目的 传递引用:引用参数本质上也是值传递的,它表现为名字传递,即以形参的名字来代替实参名字.如果实参不是实体名而是表达式,那么其表达式所对应的临时实体取名为形参,并要求其为常量引用 意义:指针和引用参数的存在,使函数实际上可以访问非局部的数据区,函数的黑盒性便名存实亡.但这并非一定坏事,指针是一把双刃剑,或灵巧或邪恶.引用是为了防范指针非安全的无意操作传递指针须附带传递单位数据的个数传递指针须附带传递单位数据的个数void mySort(int* b, int size); void f() { int a[] = {3, 5, 7, 1, 8, 4, 9}; mySort(a, sizeof(a)/sizeof(a[0])); }元素个数传指针null限制无意操作带来的意外副作用vector add( // 向量加法 const vector& a, const vector& b) { vector c(a.size()); for(unsigned i=0; i void f(){ int b; // 未初始化 std::cout<<”B=>”<”< int a=5; int b=6; int main(){ int* ap=(int*)4202660; *ap=8; std::cout< using namespace std; int main(){ for(int a,b; cin>>a>>b;) cout<f0509 using anmespace std; int main(int argc, char** argv) { for(int i=0; if0510 a1 a2 a3↙ f0510 a1 a2 a36. 递归函数 ( Recursive Functions )6. 递归函数 ( Recursive Functions )形式上:一个正在执行的函数调用了自身(直接递归).或者,一个函数调用了另一个函数,而另一个函数却调用了本函数(间接递归) 本质上:程序在运行中调用了相同代码实体的函数,却在函数栈中重新复制了该函数的整套数据,由于每套数据中的参数也许不同,导致了计算条件发生变化,使得函数得以逐步逼近终极目标而运行递归函数可以转换为非递归函数 例如,求最大公约数递归函数可以转换为非递归函数 例如,求最大公约数long gcd1(int a, int b) // 递归版 { if(a%b==0) return b; return gcd(b, a%b); }//-------------------------- long gcd2(int a, int b) // 非递归版 { for(int temp; b; a=b, b=temp) temp = a%b; return a; }//--------------------------7. 函数重载 ( Function Overload )7. 函数重载 ( Function Overload )函数重载:一组概念相同,处理对象(参数)不同的过程,出于方便编程的目的,用同一个函数名字来命名的技术称为函数重载 参数默认:一个函数,既可以严谨和地道的调用,也可以省略参数,轻灵地调用,达到此种方便编程目的的技术称为参数默认 重载与参数默认:它们都是通过参数的变化来分辨处理任务的不同.如果参数决定了不同的处理过程,则应重载,否则参数默认更简捷一些重载是不同的函数,以参数的类型,个数和顺序来分辨重载是不同的函数,以参数的类型,个数和顺序来分辨void print(double); void print(int); void func(){ print(1); // void print(int); print(1.0); // void print(double); print(‘a’); // void print(int); print(3.1415f); // void pirnt(double); }参数默认是通过不同参数来分辨一个函数调用中的行为差异参数默认是通过不同参数来分辨一个函数调用中的行为差异void delay(int a = 2); // 函数声明时 int main(){ delay(); // 默认延迟2秒 delay(2); // 延迟2秒 delay(5); // 延迟5秒 } void delay(int a){ // 函数定义时 int sum=0; for(int i=1; i<=a; ++i) for(int j=1; j<3500; ++j) for(int k=1; k<100000; ++k) sum++; }
/
本文档为【C++程序设计教程5】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索