(9)--第5章数据的共享与保护.pdf

面向对象程序设计__清华大学

收藏

资源目录
跳过导航链接。
面向对象程序设计__清华大学.zip
面向对象程序设计__清华大学
(9)--第5章数据的共享与保护.pdf---(点击预览)
(7)--第7章继承与派生.pdf---(点击预览)
(6)--第8章多态性.pdf---(点击预览)
(5)--第9章模板与群体数据.pdf---(点击预览)
(4.4.1)--基于Qt图形界面的蒙特卡洛方法实现.pdf---(点击预览)
(4.3.4)--异常处理作业.pdf---(点击预览)
(4.3.3)--异常处理教师授课提示.pdf---(点击预览)
(4.3.2)--异常处理实验.pdf---(点击预览)
(4.3.1)--异常处理.pdf---(点击预览)
(4.2.5)--流类库与输入输出作业.pdf---(点击预览)
(4.2.4)--流类库与输入输出教师授课提示.pdf---(点击预览)
(4.2.3)--流类库与输入输出实验.pdf---(点击预览)
(4.2.2)--流类库与输入输出实验案例.pdf---(点击预览)
(4.2.1)--流类库与输入输出.pdf---(点击预览)
(4.1.5)--泛型程序设计与C++标准模板库作业.pdf---(点击预览)
(4.1.4)--泛型程序设计与C++标准模板库授课提示.pdf---(点击预览)
(4.1.3)--泛型程序设计与C++标准模板库实验.pdf---(点击预览)
(4.1.2)--泛型程序设计与C++标准模板库实验案例.pdf---(点击预览)
(4.1.1)--泛型程序设计与C++标准模板库.pdf---(点击预览)
(4)--第10章泛型程序设计与C++标准模板库.pdf---(点击预览)
(3.3.9)--群体类和群体数据的组织教师授课提示(三).pdf---(点击预览)
(3.3.8)--群体类和群体数据的组织教师授课提示(二).pdf---(点击预览)
(3.3.7)--群体类和群体数据的组织教师授课提示(一).pdf---(点击预览)
(3.3.6)--群体类和群体数据的组织实验.pdf---(点击预览)
(3.3.5)--群体类和群体数据的组织实验案例.pdf---(点击预览)
(3.3.4)--群体类和群体数据的组织补充例题.pdf---(点击预览)
(3.3.3)--群体类和群体数据的组织(五六).pdf---(点击预览)
(3.3.2)--群体类和群体数据的组织(三四).pdf---(点击预览)
(3.3.10)--群体类和群体数据的组织作业.pdf---(点击预览)
(3.3.1)--群体类和群体数据的组织(一二).pdf---(点击预览)
(3.2.5)--多态性作业.pdf---(点击预览)
(3.2.4)--多态性教师授课提示.pdf---(点击预览)
(3.2.3)--多态性实验.pdf---(点击预览)
(3.2.2)--多态性实验案例.pdf---(点击预览)
(3.2.1)--多态性.pdf---(点击预览)
(3.1.6)--继承与派生作业.pdf---(点击预览)
(3.1.5)--继承与派生教师授课提示.pdf---(点击预览)
(3.1.4)--继承与派生实验.pdf---(点击预览)
(3.1.3)--继承与派生实验案例.pdf---(点击预览)
(3.1.2)--继承与派生(三四).pdf---(点击预览)
(3.1.1)--继承与派生(一二).pdf---(点击预览)
(3)--面向对象程序设计课程期末大作业要求.pdf---(点击预览)
(3)--第11章流类库与输入输出.pdf---(点击预览)
(20)--继承与派生.pdf---(点击预览)
(2.4.8)--数组指针与字符串教师授课提示.pdf---(点击预览)
(2.4.7)--数组指针与字符串实验.pdf---(点击预览)
(2.4.6)--数组指针与字符串实验案例.pdf---(点击预览)
(2.4.5)--数组指针与字符串补充例题.pdf---(点击预览)
(2.4.4)--数组指针与字符串(七八).pdf---(点击预览)
(2.4.3)--数组指针与字符串(五六).pdf---(点击预览)
(2.4.2)--数组指针与字符串(三四).pdf---(点击预览)
(2.4.1)--数组指针与字符串(一二).pdf---(点击预览)
(2.3.5)--数组指针与字符串作业.pdf---(点击预览)
(2.3.4)--数据的共享与保护教师授课提示.pdf---(点击预览)
(2.3.3)--数据的共享与保护实验.pdf---(点击预览)
(2.3.2)--数据的共享与保护实验案例.pdf---(点击预览)
(2.3.1)--数据的共享与保护.pdf---(点击预览)
(2.2.1)--数据的共享与保护作业.pdf---(点击预览)
(2.1.7)--类与对象作业.pdf---(点击预览)
(2.1.6)--类与对象教师授课提示.pdf---(点击预览)
(2.1.5)--类与对象实验.pdf---(点击预览)
(2.1.4)--类与对象实验案例.pdf---(点击预览)
(2.1.3)--类与对象补充例题.pdf---(点击预览)
(2.1.2)--类与对象(三四).pdf---(点击预览)
(2.1.1)--类与对象(一二).pdf---(点击预览)
(2)--面向对象程序设计课程期中考试(答案题解).pdf---(点击预览)
(2)--第12章异常处理.pdf---(点击预览)
(19)--C++简单程序设计.pdf---(点击预览)
(18)--函数.pdf---(点击预览)
(17)--群体类和群体数据的组织.pdf---(点击预览)
(15)--第1章.pdf---(点击预览)
(14)--第2章.pdf---(点击预览)
(13)--第3章.pdf---(点击预览)
(12)--第2章C++简单程序设计.pdf---(点击预览)
(11)--类与对象.pdf---(点击预览)
(10)--第4章类与对象.pdf---(点击预览)
(1.3.6)--函数作业.pdf---(点击预览)
(1.3.5)--函数实验.pdf---(点击预览)
(1.3.4)--函数教师授课提示.pdf---(点击预览)
(1.3.3)--函数实验案例.pdf---(点击预览)
(1.3.2)--函数(三四).pdf---(点击预览)
(1.3.1)--函数(一二).pdf---(点击预览)
(1.2.7)--C++简单程序设计作业.pdf---(点击预览)
(1.2.6)--C++简单程序设计教师授课提示.pdf---(点击预览)
(1.2.5)--C++简单程序设计实验.pdf---(点击预览)
(1.2.4)--C++简单程序设计实验案例.pdf---(点击预览)
(1.2.3)--C++简单程序设计(五六七).pdf---(点击预览)
(1.2.2)--C++简单程序设计(三四).pdf---(点击预览)
(1.2.1)--C++简单程序设计(一二).pdf---(点击预览)
(1.1.6)--C++语言绪论作业.pdf---(点击预览)
(1.1.5)--C++语言绪论教师授课提示.pdf---(点击预览)
(1.1.4)--C++语言绪论实验.pdf---(点击预览)
(1.1.3)--C++开发环境介绍及程序举例.pdf---(点击预览)
(1.1.2)--第1章绪论.pdf---(点击预览)
(1.1.1)--C++语言绪论.pdf---(点击预览)
(1)--面向对象程序设计课程期中考试(试卷).pdf---(点击预览)
(1)--第3章函数.pdf---(点击预览)
(16)--数组指针与字符串.pdf
(8)--第6章数组指针与字符串.pdf
压缩包内文档预览:(预览前20页/共71页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:67342196    类型:共享资源    大小:35.54MB    格式:ZIP    上传时间:2020-04-05 上传人:独** IP属地:江苏
20
积分
关 键 词:
面向 对象 程序设计 __ 清华大学
资源描述:
面向对象程序设计__清华大学,面向,对象,程序设计,__,清华大学
内容简介:
C+ 语言程序设计(第 4 版),郑莉,清华大学第三章 函数清华大学 郑 莉C+ 语言程序设计(第 4版)C+ 语言程序设计(第 4 版),郑莉,清华大学本章导学 主要内容3.1 函数的定义与使用3.2 内联函数3.3 constexpr 函数3.4 带默认参数值的函数3.5 函数重载3.6 使用 C+ 系统函数 学习建议 用调试工具跟踪函数的调用与返回 分析递归函数的执行过程 完成本章习题与实验C+ 语言程序设计(第 4 版),郑莉,清华大学3.1.1 函数定义 函数定义的语法形式类型标识符 函数名(形式参数表) 语句序列33.1 函数的定义与使用 name1, name2, ., namen是被初始化的内部变量,寿命和可见性仅限于函数内部表示返回值类型,由 return 语句给出返回值若无返回值,写 void ,不必写 return 语句。C+ 语言程序设计(第 4 版),郑莉,清华大学3.1.2 函数的调用 调用前先声明函数: 若函数定义在调用点之前,可以不另外声明; 若函数定义在调用点之后,必须要在调用函数前声明函数原型: 类型标识符 被调用函数名(含类型说明的形参表) ; 调用形式 函数名(实参列表) 嵌套调用 在一个函数的函数体中,调用另一函数。 递归调用 函数直接或间接调用自身。3.1 函数的定义与使用C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-1 编写一个求 x 的 n 次方的函数#include using namespace std;/ 计算 x 的 n 次方double power(double x, int n) double val = 1.0;while (n-) val *= x;return val;int main() cout 5 to the power 2 is power(5, 2) endl;return 0;3.1.2 函数的调用C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-2 数制转换题目: 输入一个 8 位二进制数,将其转换为十进制数输出。例如: 11012=1(23)+1(22)+0(21)+1(20)=1310 所以,如果输入 1101 ,则应输出 133.1 函数的定义与使用 3.1.2 函数的调用C+ 语言程序设计(第 4 版),郑莉,清华大学#include using namespace std;double power (double x, int n); / 计算 x 的 n 次方int main() int value = 0;cout = 0; i-) char ch; cin ch; if (ch = 1) value += static_cast(power(2, i);cout Decimal value is value endl;return 0;double power (double x, int n) double val = 1.0;while (n-) val *= x;return val;3.1.2 函数的调用运行结果:Enter an 8 bit binary number 01101001Decimal value is 105例 3-2 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-3 编写程序求 的值 的计算公式如下:其中 arctan 用如下形式的级数计算:直到级数某项绝对值不大于 10-15为止; 和 x 均为 double 型。3.1 函数的定义与使用 3.1.2 函数的调用1116arctan4arctan5239 =- 357arctan357xxxxx=-+-+KC+ 语言程序设计(第 4 版),郑莉,清华大学#include using namespace std;double arctan(double x) double sqr = x * x;double e = x;double r = 0;int i = 1;while (e / i 1e-15) double f = e / i;r = (i % 4 = 1) ? r + f : r - f;e = e * sqr;i += 2;return r;93.1.2 函数的调用例 3-3 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学int main() double a = 16.0 * arctan(1/5.0); double b = 4.0 * arctan(1/239.0); / 注意:因为整数相除结果取整,如果参数写 1/5 , 1/239 ,结果就都是 0 cout PI = a - b endl;return 0;3.1.2 函数的调用运行结果:PI=3.14159例 3-3 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-4 寻找并输出 11999 之间的数 m ,它满足 m 、 m2和 m3均为回文数。 回文:各位数字左右对称的整数。例如: 11 满足上述条件 112 2=121 , 113 3=1331 。 分析: 用除以 10 取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。113.1 函数的定义与使用 3.1.2 函数的调用C+ 语言程序设计(第 4 版),郑莉,清华大学#include using namespace std;/ 判断 n 是否为回文数bool symm(unsigned n) unsigned i = n;unsigned m = 0;while (i 0) m = m * 10 + i % 10; i /= 10; return m = n;3.1.2 函数的调用例 3-4 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学int main() for(unsigned m = 11; m 1000; m+) if (symm(m) & symm(m * m) & symm(m * m * m) cout m = m; cout m * m = m * m; cout m * m * m = m * m * m 当当3572111sin( 1)1!3!5!7!(21)!nnnxxxxxxn-=-+-+=-KC+ 语言程序设计(第 4 版),郑莉,清华大学#include #include / 对标准库中数学函数的说明using namespace std;const double TINY_VALUE = 1e-10;double tsin(double x) double g = 0;double t = x;int n = 1;do g += t;n+;t = -t * x * x / (2 * n - 1) / (2 * n - 2); while (fabs(t) = TINY_VALUE); return g;3.1.2 函数的调用例 3-5 (续)3572111sin( 1)1!3!5!7!(21)!nnnxxxxxxn-=-+-+=-K计算精度为 10-10C+ 语言程序设计(第 4 版),郑莉,清华大学int main() double k, r, s;cout r;cout s;if (r * r = s * s) k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s);else k = tsin(r * s) / 2;cout k 当当C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-6 投骰子的随机游戏每个骰子有六面,点数分别为 1 、 2 、 3 、 4 、 5 、 6 。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。每轮投两次骰子,第一轮如果和数为 7 或 11 则为胜,游戏结束;和数为 2、 3 或 12 则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮 . 直到某轮的和数等于点数则取胜,若在此前出现和数为 7 则为负。由 rolldice 函数负责模拟投骰子、计算和数并输出和数。3.1 函数的定义与使用 3.1.2 函数的调用C+ 语言程序设计(第 4 版),郑莉,清华大学例 3.6 (续) rand函数原型: int rand(void);所需头文件: 功能和返回值:求出并返回一个伪随机数 srand函数原型: void srand(unsigned int seed);参数: seed 产生随机数的种子。所需头文件: 功能:为使 rand() 产生一序列伪随机整数而设置起始点。使用 1 作为 seed 参数,可以重新初化 rand() 。3.1 函数的定义与使用 3.1.2 函数的调用C+ 语言程序设计(第 4 版),郑莉,清华大学#include #include using namespace std;enum GameStatus WIN, LOSE, PLAYING ;int main() int sum, myPoint;GameStatus status;unsigned seed; int rollDice(); cout seed; / 输入随机数种子srand(seed); / 将种子传递给 rand()3.1.2 函数的调用例 3-6 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学sum = rollDice(); / 第一轮投骰子、计算和数 switch (sum) case 7: / 如果和数为 7 或 11 则为胜 , 状态为 WINcase 11: status = WIN; break;case 2: / 和数为 2 、 3 或 12 则为负 , 状态为 LOSEcase 3: case 12: status = LOSE; break;default: / 其它情况,尚无结果,状态为 PLAYING ,记下点数 status = PLAYING; myPoint = sum; cout point is myPoint endl; break;3.1.2 函数的调用例 3-6 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学 while (status = PLAYING) / 只要状态为 PLAYING ,继续 sum = rollDice(); if (sum = myPoint) / 某轮的和数等于点数则取胜 status = WIN; else if (sum = 7) / 出现和数为 7 则为负 status = LOSE; / 当状态不为 PLAYING 时循环结束,输出游戏结果 if (status = WIN) cout player wins endl; else cout player loses endl; return 0; 3.1.2 函数的调用例 3-6(续)C+ 语言程序设计(第 4 版),郑莉,清华大学/ 投骰子、计算和数、输出和数int rollDice() int die1 = 1 + rand() % 6;int die2 = 1 + rand() % 6;int sum = die1 + die2;cout player rolled die1 + die2 = sum endl;return sum;3.1.2 函数的调用例 3-6 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-6 (续)运行结果:Please enter an unsigned integer:23player rolled 6 + 3 = 9point is 9player rolled 5 + 4 = 9player wins3.1.2 函数的调用C+ 语言程序设计(第 4 版),郑莉,清华大学嵌套调用3.1 函数的定义与使用 3.1.2 函数的调用main调 fun1()结束fun1()调 fun2()返回fun2()返回C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-7 输入两个整数,求平方和#include using namespace std;int fun2(int m) return m * m;int fun1(int x,int y) return fun2(x) + fun2(y);int main() int a, b;cout a b;cout The sum of square of a and b: fun1(a, b) C+ 语言程序设计(第 4 版),郑莉,清华大学递归调用过程3.1 函数的定义与使用 3.1.2 函数的调用函数直接或间接地调用自身,称为递归调用。例如:计算 n! 递归算法执行的两个阶段:递推: 4!=43!3!=32!2!=21!1!=10!0!=1未知 已知回归:4!=43!=243!=32!=62!=21!=21!=10!=10!=1未知 已知C+ 语言程序设计(第 4 版),郑莉,清华大学#include using namespace std;unsigned fac(int n)unsigned f;if (n = 0) f = 1; else f = fac(n - 1) * n; return f;int main() unsigned n;cout n;unsigned y = fac(n);cout n ! = y endl;return 0;3.1.2 函数的调用运行结果:Enter a positive integer:88! = 40320例 3-8 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-9 题目:用递归法计算从 n 个人中选择 k 个人组成一个委员会的不同组合数。 分析: 由 n 个人里选 k 个人的组合数 = 由 n-1 个人里选 k 个人的组合数 + 由 n-1 个人里选 k-1 个人的组合数 当 n = k 或 k = 0 时,组合数为 13.1 函数的定义与使用 3.1.2 函数的调用C+ 语言程序设计(第 4 版),郑莉,清华大学#include using namespace std;int comm(int n, int k) if (k n) return 0;else if (n = k | k = 0) return 1;else return comm(n - 1, k) + comm(n - 1, k - 1);int main() int n, k;cout n k;cout C(n, k) = comm(n, k) endl;return 0;3.1.2 函数的调用运行结果:18 58568例 3-9 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-10 有三根针 A 、 B 、 C 。 A 针上有 N 个盘子,大的在下,小的在上,要求把这 N 个盘子从 A 针移到 C 针,在移动过程中可以借助 B 针,每次只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。3.1 函数的定义与使用 3.1.2 函数的调用ABCC+ 语言程序设计(第 4 版),郑莉,清华大学例 3-10 (续)将 n 个盘子从 A 针移到 C 针可以分解为三个步骤: 将 A 上 n-1 个盘子移到 B 针上(借助 C 针) ; 把 A 针上剩下的一个盘子移到 C 针上 ; 将 n-1 个盘子从 B 针移到 C 针上(借助 A 针) ;上面三个步骤包含两种操作: 将多个盘子从一个针移到另一个针上,这是一个递归的过程。 hanoi 函数实现。 将 1 个盘子从一个针上移到另一针上。用 move 函数实现。3.1 函数的定义与使用 3.1.2 函数的调用C+ 语言程序设计(第 4 版),郑莉,清华大学将 n 个盘子从 A 针移到 C 针可以分解为三个步骤: 将 A 上 n-1 个盘子移到 B 针上(借助 C 针) ; 把 A 针上剩下的一个盘子移到 C 针上 ; 将 n-1 个盘子从 B 针移到 C 针上(借助 A 针) ;上面三个步骤包含两种操作: 将多个盘子从一个针移到另一个针上,这是一个递归的过程。 hanoi 函数实现。 将 1 个盘子从一个针上移到另一针上。用 move 函数实现。3.1 函数的定义与使用 3.1.2 函数的调用例 3-10 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学#include using namespace std;/ 将 src 针的最上面一个盘子移动到 dest 针上void move(char src, char dest) cout src dest endl;/ 将 n 个盘子从 src 针移动到 dest 针,以 medium 针作为中转void hanoi(int n, char src, char medium, char dest) if (n = 1) move(src, dest); else hanoi(n - 1, src, dest, medium); move(src, dest); hanoi(n - 1, medium, src, dest); 3.1.2 函数的调用例 3-10 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学int main() int m;cout m;cout the steps to moving m diskes: CA - BC - BA - CB - AB - CA - C例 3-10 (续)3.1.2 函数的调用C+ 语言程序设计(第 4 版),郑莉,清华大学3.1.3 函数的参数传递 在函数被调用时才分配形参的存储单元 实参可以是常量、变量或表达式 实参类型必须与形参相符 值传递是传递参数值,即单向传递 引用传递可以实现双向传递 常引用作参数可以保障实参数据的安全3.1 函数的定义与使用C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-11 输入两个整数并交换(值传递)#includeusing namespace std;void swap(int a, int b) int t = a;a = b;b = t;int main() int x = 5, y = 10;coutx = x y = yendl;swap(x, y);coutx = x y = yendl;return 0;3.1.3 函数的参数传递运行结果:x = 5 y = 10x = 5 y = 10C+ 语言程序设计(第 4 版),郑莉,清华大学a=b;5 x10 y5 a10 b执行主函数中的函数调用swap(x,y);t=a;5 x10 y5 a10 b5tb=t;5 x10 y10 a5 b5t5 x10 y10 a10 b5t在 swap 子函数中返回主函数以后5x10y3.1.3 函数的参数传递C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-12 输入两个整数交换后输出(引用传递)#includeusing namespace std;void swap(int& a, int& b) int t = a;a = b;b = t;int main() int x = 5, y = 10;coutx = x y = yendl;swap(x, y);coutx = x y = y endl;return 0;3.1.3 函数的参数传递运行结果 :x = 5 y = 10x = 10 y = 5C+ 语言程序设计(第 4 版),郑莉,清华大学t=a;x5t5x 的引用axy510y 的引用x 的引用aby 的引用x 的引用abx10y10a=bb=t;y5t5y 的引用bxy105swap(x,y);3.1 函数的定义与使用 3.1.3 函数的参数传递C+ 语言程序设计(第 4 版),郑莉,清华大学引用类型 引用 (&) 是标识符的别名 , 例如 :int i, j;int &ri = i; / 定义 int 引用 ri ,并初始化为变量 i 的引用j = 10;ri = j;/ 相当于 i = j; 声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象。 一旦一个引用被初始化后,就不能改为指向其它对象。 引用可以作为形参void swap(int &a, int &b) .3.1 函数的定义与使用 3.1.3 函数的参数传递C+ 语言程序设计(第 4 版),郑莉,清华大学含有可变参数的函数 C+ 标准中提供了两种主要的方法 如果所有的实参类型相同,可以传递一个名为 initializer_list 的标准库类型; 如果实参的类型不同,我们可以编写可变参数的模板(第 9 章)。 initializer_list initializer_list 是一种标准库类型,用于表示某种特定类型的值的数组,该类型定义在同名的头文件中3.1 函数的定义与使用 3.1.3 函数的参数传递C+ 语言程序设计(第 4 版),郑莉,清华大学initializer_list 提供的操作initializer_list 提供的操作提供的操作initializer_list lst;默认初始化; T 类型元素的空列表initializer_list lsta, b, clst 的元素数量和初始值一样多; lst 的元素是对应初始值的副本;列表中的元素是 constlst2(lst)拷贝或者赋值一个 initializer_list 对象但不拷贝列表中的元素;拷贝后原始列表和副本共享元素lst2 = lstlst.size()列表中的元素数量lst.begin()返回指向 lst 首元素的指针lst.end()返回指向 lst 尾元素下一位置的指针3.1 函数的定义与使用 3.1.3 函数的参数传递C+ 语言程序设计(第 4 版),郑莉,清华大学initializer_list 的使用方法 initializer_list 是一个类模板(第 9 章详细介绍模板) 使用模板时,我们需要在模板名字后面跟一对尖括号,括号内给出类型参数。例如: initializer_list ls; / initializer_list 的元素类型是 string initializer_list li; / initializer_list 的元素类型是 int initializer_list 比较特殊的一点是,其对象中的元素永远是常量值,我们无法改变 initializer_list 对象中元素的值。 含有 initializer_list 形参的函数也可以同时拥有其他形参3.1 函数的定义与使用 3.1.3 函数的参数传递C+ 语言程序设计(第 4 版),郑莉,清华大学initializer_list 使用举例 在编写代码输出程序产生的错误信息时,最好统一用一个函数实现该功能,使得对所有错误的处理能够整齐划一。然而错误信息的种类不同,调用错误信息输出函数时传递的参数也会各不相同。 使用 initializer_list 编写一个错误信息输出函数,使其可以作用于可变数量的形参。3.1 函数的定义与使用 3.1.3 函数的参数传递C+ 语言程序设计(第 4 版),郑莉,清华大学initializer_list 使用举例(续) 错误处理函数void print_err(initializer_list lst) for (auto beg = lst.begin(); beg != lst.end(); +beg)cout *beg ;cout endl; 调用 print_err/ expected 和 actual 是 string 对象if (expected != actual)print_err( “return”, actual, “,”, expected, “is”, “expercted” );/6 个实参elseprint_err( “function”, “right” );/2 个实参3.1.3 函数的参数传递C+ 语言程序设计(第 4 版),郑莉,清华大学3.2 内联函数 声明时使用关键字 inline 。 编译时在调用处用函数体进行替换 , 节省了参数传递、控制转移等开销。 注意: 内联函数体内不能有循环语句和 switch 语句; 内联函数的定义必须出现在内联函数第一次被调用之前; 对内联函数不能进行异常接口声明。C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-14 内联函数应用举例#include using namespace std;const double PI = 3.14159265358979;inline double calArea(double radius) return PI * radius * radius;int main() double r = 3.0;double area = calArea(r);cout area endl;return 0;3.2 内联函数C+ 语言程序设计(第 4 版),郑莉,清华大学 3.3 constexpr 函数 constexpr 修饰的函数在其所有参数都是 constexpr 时,一定返回 constexpr; 函数体中必须有且仅有一条 return 语句。C+ 语言程序设计(第 4 版),郑莉,清华大学constexpr 函数举例 constexpr int get_size() return 20; constexpr int foo = get_size(); / 正确: foo 是一个常量表达式3.3 constexpr 函数C+ 语言程序设计(第 4 版),郑莉,清华大学3.3 带默认参数值的函数 可以预先设置默认的参数值,调用时如给出实参,则采用实参值,否则采用预先设置的默认参数值。 例如:int add(int x = 5,int y = 6) return x + y;int main() add(10,20); /10+20add(10); /10+6add(); /5+6C+ 语言程序设计(第 4 版),郑莉,清华大学默认参数值的说明次序 有默认参数的形参必须列在形参列表的最右,即默认参数值的右面不能有无默认值的参数 调用时实参与形参的结合次序是从左向右 例:int add(int x, int y = 5, int z = 6);/ 正确int add(int x = 1, int y = 5, int z);/ 错误int add(int x = 1, int y, int z = 6);/ 错误3.3 带默认参数值的函数C+ 语言程序设计(第 4 版),郑莉,清华大学默认参数值与函数的调用位置 如果一个函数有原型声明,且原型声明在定义之前,则默认参数值必须在函数原型声明中给出;而如果只有函数的定义,或函数定义在前,则默认参数值需在函数定义中给出。 例:3.3 带默认参数值的函数int add(int x = 5,int y = 6) / 只有定义,没有原型声明 return x + y;int main() add();int add(int x = 5,int y = 6);/ 原型声明在前int main() add(); int add(int x,int y) / 此处不能再指定默认值 return x + y;C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-15 计算长方体的体积 函数 getVolume 计算体积 有三个形参: length (长)、 width (宽)、 height (高),其中 width 和 height带有默认值。 主函数中以不同形式调用 getVolume 函数3.3 带默认参数值的函数C+ 语言程序设计(第 4 版),郑莉,清华大学/3_15.cpp#include #include using namespace std;int getVolume(int length, int width = 2, int height = 3);int main() const int X = 10, Y = 12, Z = 15;cout Some box data is ;cout getVolume(X, Y, Z) endl;cout Some box data is ;cout getVolume(X, Y) endl;cout Some box data is ;cout getVolume(X) endl;return 0;int getVolume(int length, int width, int height) cout setw(5) length setw(5) width setw(5) height t;return length * width * height;3.3 带默认参数值的函数例 3-15 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学3.4 函数重载 C+ 允许功能相近的函数在相同的作用域内以相同函数名声明,从而形成重载。方便使用,便于记忆。 例:58形参类型不同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);C+ 语言程序设计(第 4 版),郑莉,清华大学注意事项3.4 函数重载 不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。这样不好: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; 重载函数的形参必须不同 : 个数不同或类型不同。 编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-16 重载函数应用举例编写两个名为 sumOfSquare 的重载函数,分别求两整数的平方和及两实数的平方和。603.4 函数重载C+ 语言程序设计(第 4 版),郑莉,清华大学#include using namespace std;int sumOfSquare(int a, int b) return a * a + b * b;double sumOfSquare(double a, double b) return a * a + b * b;int main() int m, n; cout m n; coutTheir sum of square: sumOfSquare(m, n)endl; double x, y; cout x y; coutTheir sum of square: sumOfSquare(x, y)endl; return 0;3.4 函数重载例 3-16(续)C+ 语言程序设计(第 4 版),郑莉,清华大学运行结果:Enter two integer: 3 5Their sum of square: 34Enter two real number: 2.3 5.8Their sum of square: 38.93例 3-16 (续)3.4 函数重载C+ 语言程序设计(第 4 版),郑莉,清华大学3.5 使用 C+ 系统函数 C+ 的系统库中提供了几百个函数可供程序员使用,例如: 求平方根函数( sqrt ) 求绝对值函数( abs ) 使用系统函数时要包含相应的头文件,例如: cmath63C+ 语言程序设计(第 4 版),郑莉,清华大学例 3-17 系统函数应用举例 题目:从键盘输入一个角度值,求出该角度的正弦值、余弦值和正切值。 分析:系统函数中提供了求正弦值、余弦值和正切值的函数: sin() 、 cos() 、 tan() ,函数的说明在头文件 cmath 中。643.5 使用 C+ 系统函数C+ 语言程序设计(第 4 版),郑莉,清华大学#include #include using namespace std;const double PI = 3.14159265358979;int main() double angle;cout angle;/ 输入角度值double radian = angle * PI / 180; / 转为弧度cout sin( angle ) = sin(radian) endl;cout cos( angle ) = cos(radian) endl;cout tan( angle ) = tan(radian) endl;return 0;653.5 使用 C+ 系统函数运行结果:30sin(30)=0.5cos(30)=0.866025tan(30)=0.57735例 3-17 (续)C+ 语言程序设计(第 4 版),郑莉,清华大学小结 主要内容 函数的声明和调用、函数间的参数传递、内联函数、带默认参数值的函数、函数重载、 C+ 系统函数 达到的目标 学会将一段功能相对独立的程序写成一个函数,为下一章学习类和对象打好必要的基础。C+ 语言程序设计(第 4 版)第一章 绪论清华大学 郑 莉C+ 语言程序设计(第 4 版),郑莉,清华大学目录1.1 计算机程序设计语言的发展1.2 面向对象的方法1.3 面向对象的软件开发1.4 信息的表示与存储1.5 程序的开发过程1.6 小结2C+ 语言程序设计(第 4 版),郑莉,清华大学计算机程序 计算机的工作是用程序来控制的 程序是指令的集合。 指令是计算机可以识别的命令。31.1 计算机程序设计语言的发展C+ 语言程序设计(第 4 版),郑莉,清华大学1.1.1 机器语言与汇编语言 由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。 计算机发展的初期,软件工程师们只能用机器语言来编写程序。这一阶段,在人类的自然语言和计算机编程语言之间存在着巨大的鸿沟。 汇编语言将机器指令映射为一些可以被人读懂的助记符,如 ADD 、 SUB 等。 此时编程语言与人类自然语言间的鸿沟略有缩小,但仍与人类的思维相差甚远。因为它的抽象层次太低,程序员需要考虑大量的机器细节。41.1 计算机程序设计语言的发展C+ 语言程序设计(第 4 版),郑莉,清华大学1.1.2 高级语言 高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物。51.1 计算机程序设计语言的发展C+ 语言程序设计(第 4 版),郑莉,清华大学1.1.3 面向对象的语言 出发点: 更直接地描述客观世界中存在的事物 ( 对象 ) 以及它们之间的关系。 特点: 是高级语言。 将客观事物看作具有属性和行为的对象。 通过抽象找出同一类对象的共同属性和行为,形成类。 通过类的继承与多态实现代码重用61.1 计算机程序设计语言的发展C+ 语言程序设计(第 4 版),郑莉,清华大学1.1.3 面向对象的语言(续) 优点:使程序能够比较直接地反映问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。71.1 计算机程序设计语言的发展C+ 语言程序设计(第 4 版),郑莉,清华大学1.2.1 面向对象方法的由来 面向过程的程序设计方法 最早的程序 目的:用于数学计算 主要工作:设计求解问题的过程 缺点:对于庞大、复杂的程序难以开发和维护81.2 面向对象的方法C+ 语言程序设计(第 4 版),郑莉,清华大学面向过程的结构化程序设计方法 设计思路 自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。 程序结构: 按功能划分为若干个基本模块,形成一个树状结构。 各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。 其模块化实现的具体方法是使用子程序。91.2 面向对象的方法 - 1.2.1 面向对象方法的由来C+ 语言程序设计(第 4 版),郑莉,清华大学面向过程的结构化程序设计方法(续) 优点:有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。101.2 面向对象的方法 - 1.2.1 面向对象方法的由来C+ 语言程序设计(第 4 版),郑莉,清华大学面向过程的结构化程序设计方法(续) 缺点:可重用性差、数据安全性差、难以开发大型软件和图形界面的应用软件 把数据和处理数据的过程分离为相互独立的实体。 当数据结构改变时,所有相关的处理过程都要进行相应的修改。 每一种相对于老问题的新方法都要带来额外的开销。 图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。111.2 面向对象的方法 - 1.2.1 面向对象方法的由来C+ 语言程序设计(第 4 版),郑莉,清华大学面向对象的方法 将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体对象。 对同类型对象抽象出其共性,形成类。 类通过一个简单的外部接口,与外界发生关系。 对象与对象之间通过消息进行通信。121.2 面向对象的方法 - 1.2.1 面向对象方法的由来C+ 语言程序设计(第 4 版),郑莉,清华大学面向对象的方法(续) 优点: 程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。 通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。131.2 面向对象的方法 - 1.2.1 面向对象方法的由来C+ 语言程序设计(第 4 版),郑莉,清华大学1.2.2 面向对象的基本概念对象 一般意义上的对象: 是现实世界中一个实际存在的事物。 可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)。 是构成世界的一个独立单位,具有 静态特征:可以用某种数据来描述 动态特征:对象所表现的行为或具有的功能141.2 面向对象的方法C+ 语言程序设计(第 4 版),郑莉,清华大学对象(续) 面向对象方法中的对象: 是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象由一组属性和一组行为构成。 属性:用来描述对象静态特征的数据项。 行为:用来描述对象动态特征的操作序列。151.2 面向对象的方法 - 1.2.2 面向对象的基本概念C+ 语言程序设计(第 4 版),郑莉,清华大学类 分类人类通常的思维方法 分类所依据的原则抽象 忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。 例如,石头、树木、汽车、房屋等都是人们在长期的生产和生活实践中抽象出的概念。161.2 面向对象的方法 - 1.2.2 面向对象的基本概念C+ 语言程序设计(第 4 版),郑莉,清华大学类(续) 面向对象方法中的 类 具有相同属性和服务的一组对象的集合 为属于该类的全部对象提供了抽象的描述,包括属性和行为两个主要部分。 类与对象的关系:犹如模具与铸件之间的关系,一个属于某类的对象称为该类的一个实例。171.2 面向对象的方法 - 1.2.2 面向对象的基本概念C+ 语言程序设计(第 4 版),郑莉,清华大学封装 把对象的属性和服务结合成一个独立的系统单元。 尽可能隐蔽对象的内部细节。对外形成一个边界(或者说一道屏障),只保留有限的对外接口使之与外部发生联系。181.2 面向对象的方法 - 1.2.2 面向对象的基本概念C+ 语言程序设计(第 4 版),郑莉,清华大学继承 继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。 定义:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。 例如:将轮船作为一个一般类,客轮便是一个特殊类。191.2 面向对象的方法 - 1.2.2 面向对象的基本概念C+ 语言程序设计(第 4 版),郑莉,清华大学多态性 多态是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义。 例如:数的加法 - 实数的加法 - 复数的加法201.2 面向对象的方法 - 1.2.2 面向对象的基本概念C+ 语言程序设计(第 4 版),郑莉,清华大学面向对象的软件工程 面向对象的软件工程是面向对象方法在软件工程领域的全面应用。它包括 : 面向对象的分析( OOA ) 面向对象的设计( OOD ) 面向对象的编程( OOP ) 面向对象的测试( OOT ) 面向对象的软件维护( OOSM )211.3 面向对象的软件开发C+ 语言程序设计(第 4 版),郑莉,清华大学1.3.1 分析 系统分析阶段应该扼要精确地抽象出系统必须做什么,但是不关心如何去实现。 面向对象的系统分析,直接用问题域中客观存在的事物建立模型中的对象,对单个事物及事物之间的关系,都保留他们的原貌,不做转换,也不打破原有界限而重新组合,因此能够很好地映射客观事物。221.3 面向对象的软件开发C+ 语言程序设计(第 4 版),郑莉,清华大学1.3.2 设计 针对系统的一个具体实现运用面向对象的方法。其中包括两方面的工作: 把 OOA 模型直接搬到 OOD ,作为 OOD 的一部分 针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。231.3 面向对象的软件开发C+ 语言程序设计(第 4 版),郑莉,清华大学1.3.3 编程 OOP 工作就是用一种面向对象的编程语言把OOD 模型中的每个成分书写出来,是面向对象的软件开发最终落实的重要阶段。241.3 面向对象的软件开发C+ 语言程序设计(第 4 版),郑莉,清华大学1.3.4 测试 测试的任务是发现软件中的错误。 在面向对象的软件测试中继续运用面向对象的概念与原则来组织测试,以对象的类作为基本测试单位,可以更准确地发现程序错误并提高测试效率。251.3 面向对象的软件开发C+ 语言程序设计(第 4 版),郑莉,清华大学1.3.5 维护将软件交付使用后,工作并没有完结,还要根据软件的运行情况和用户的需求,不断改进系统。使用面向对象的方法开发的软件,其程序与问题域是一致的,因此,在维护阶段运用面向对象的方法可以大大提高软件维护的效率。261.3 面向对象的软件开发C+ 语言程序设计(第 4 版),郑莉,清华大学信息的分类 指令 控制信息 控制字 信息 定点数 数值信息 数据信息 浮点数 字符数据 非数值信息 逻辑数据271.4 信息的表示和存储C+ 语言程序设计(第 4 版),郑莉,清华大学1.4.1 计算机的数字系统 计算机采用的是二进制数字系统。 基本符号: 0 、 1 进位原则:逢二进一 优点: 易于物理实现 二进制数运算简单 机器可靠性高 通用性强 缺点:对人来说可读性差281.4 信息的表示和存储C+ 语言程序设计(第 4 版),郑莉,清华大学程序设计中常用的数制291.4 信息的表示和存储 - 1.4.2 几种进位记数制之间的转换进制进制 基基 数数 进位原则进位原则 基本符号基本符号 二进制 2 逢 2 进 1 0,1 八进制 8 逢 8 进 1 0,1,2,3,4,5,6,7 十进制 10 逢 10 进 1 0,1,2,3,4,5,6,7,8,9, 十六进制 16 逢 16 进 1 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F C+ 语言程序设计(第 4 版),郑莉,清华大学R 进制十进制各位数字与它的权相乘,其积相加。例如 :(11111111.11)2=127+126+125+124 +123+122+121+120+12-1+12-2 =(255.75)10(3506.2)8=383+582+081+680+28-1=(1862.25)10(0.2A)16=216-1+1016-2=(0.1640625)10301.4 信息的表示和存储 - 1.4.2 几种进位记数制之间的转换C+ 语言程序设计(第 4 版),郑莉,清华大学十进制 R 进制十进制整数转换成 R 进制的整数“ 除 R 取余”法,例如:2 68 余 数 2 34 0 低位 2 17 0 2 8 1 2 4 0 2 2 0 2 1 0 0 1 高位所以 6810 10001002311.4 信息的表示和存储 - 1.4.2 几种进位记数制之间的转换C+ 语言程序设计(第 4 版),郑莉,清华大学十进制 R 进制(续)十进制小数转换成 R 进制小数“ 乘 R 取整”法,例如: 高位 0.3125 2 = 0 .625 0.625 2 = 1 .25 0.25 2 = 0 .5 0.5 2 = 1 .0所以 0.312510 = 0.01012 321.4 信息的表示和存储 - 1.4.2 几种进位记数制之间的转换C+ 语言程序设计(第 4 版),郑莉,清华大学二、八、十六进制的相互转换 每位八进制数相当于三位二进制数 每位十六进制数相当于四位二进制数(1011010.10)2=(001 011 010 .100)2=(132.4)8(1011010.10)2=(0101 1010 .1000)2=(5A.8)16(F7)16 (1111 0111)2 (11110111)2331.4 信息的表示和存储 - 1.4.2 几种进位记数制之间的转换C+ 语言程序设计(第 4 版),郑莉,清华大学1.4.3 信息的存储单位 位 (bit , b) :度量数据的最小单位,表示一位二进制信息。 字节 (byte , B) :由八位二进制数字组成 (1 byte = 8 bit) 。千字节 1 KB = 1024 B兆字节 1 MB = 1024 K吉字节 1 GB = 1024 M341.4 信息的表示和存储C+ 语言程序设计(第 4 版),郑莉,清华大学1.4.4 二进制数的编码表示 : 原码 符号绝对值表示 的编码例如:X=+0101011 X原= 0 0101011X=-0101011 X原= 1 0101011 符号位 缺点: 零的表示不惟一:+0原 =000.0 -0原 =100.0 进行四则运算时,符号位须单独处理,且运算规则复杂。351.4 信息的表示和存储C+ 语言程序设计(第 4 版),郑莉,清华大学1.4.4 二进制数的编码表示 : 反码 正数的反码与原码表示相同。 负数的反码与原码有如下关系:符号位相同 ( 仍用 1 表示 ) ,其余各位取反 (0 变 1, 1 变
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:面向对象程序设计__清华大学
链接地址:https://www.renrendoc.com/p-67342196.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!