第1章-C++程序设计.ppt
文本预览下载声明
执行路径覆盖 顾名思义,要求测试用例可以覆盖程序所有可能的执行路径 所以关键是列举执行路径 * 测试用例设计原则 至少语句覆盖 尽量路径覆盖 最好从句覆盖 * 例子:求最大元 templateclass type int Max(type a[], int n) {// Locate the largest element in a[0:n-1]. int pos = 0; for (int i = 1; i n; i++) if (a[pos] a[i]) pos = i; return pos; } a[0:4]=[2, 4, 6, 8, 9]:语句覆盖,但没有分支覆盖 a[0:4]=[4, 2, 6, 8, 9]:语句覆盖,且分支覆盖 P1-31流程图 * 1: pos=0 2: i++; in? start end 3: a[pos]a[i]? Y N 5: return pos 4: pos=i Y N 思考 P26例1-5最后的测试集(1,-5,6)(1,-8,16)(1,2,5)是最好的一组用例吗?为什么? * 小结 回顾了两个C++知识 拷贝构造函数 递归函数 了解了测试的基本流程,尤其是测试用例的设计方法 * 思考 设计一个梭哈游戏的子模块,判断任意5张牌是否构成“同花顺”? 合理运用语法知识写出C++源代码 设计测试用例以检验代码的正确性 使用等价类划分的方法 请说明这组用例是否满足以下准则 语句覆盖 分支覆盖 从句覆盖 执行路径覆盖 * 深入思考 你能设法实现一款自动检测和判分程序吗,要求能检验任何人用C++写的“同花顺”程序?有哪些难点? 你能用最简洁的形式完成一个人机对战的梭哈游戏吗?有哪些关键之处? * * 例子—搜索(search:查找) 已有一组数据,在其中找到指定数据 简单方法:数据无序存储,顺序搜索 如,数据集合为:26 33 35 29 19 12 22 搜索26,1次比较操作29,4次22,7次 与列表长度n成比例 例子——搜索 更好的方式:数据按大小次序存储,二分搜索方式(市场行情) 12 19 22 26 29 33 35 搜索22 与中心元素比较,26——继续搜索前半部分 同样与中心元比较,19——继续搜索后半部分 与22比较,相等,成功!3次比较! 每次比较搜索范围减小一半 充分体现了数据结构和算法的紧密关系 主要内容 课程介绍 C++核心语法(以实例为主) ①传值过程 ②拷贝构造函数 ③递归函数 ④C++11新特性 测试与调试 * H1.传值过程 * void main() { int i=Abc(1,2,3); coutiendl; } int Abc(int a, int b, int c) { return a+b+b*c+(a+b-c)/(a+b)+4; } 调用int的copy constructor将实参值拷贝给形参,即借用了实参的副本 计算完成,释放副本 void print(person p) { coutp.pNameendl; } class person { char* pName; … … } void main() { person p1(“zhang”); person p2=p1; print(p1); } 传值过程(cont.) 复制构造函数 也叫拷贝构造函数,copy constructor 当:用已存在的对象来创建一个新对象, 或:对象作为传值参数, 或:对象作为返回值 时,触发复制构造函数 隐式的复制构造函数仅提供浅拷贝 显式的复制构造函数可提供深拷贝 当类包含指针成员时一般应自定义复制构造函数 * 传值过程(cont.) * class person { char* pName; public: person(char* pN) { pName=new char[strlen(pN)+1]; strcpy(pName,pN); } person(person p) { pName=new char[strlen(p.pName)+1]; strcpy(pName, p.pName); } ~person(){ delete pName; } } 拷贝构造函数 疑问 设自定义类MyClass含有指针类型的数据成员,obj_A是MyClass的一个对象,如果程序中有语句MyClass obj_B=obj_A;则
显示全部