




已阅读5页,还剩249页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 语言程序设计 中 第1章计算机与程序设计第2章数据类型 运算符与表达式第3章输入和输出第04章控制结构第5章函数第6章数组第7章指针第9章链表第10章面向对象程序设计基本概念第11章类与对象第12章类和对象的使用第13章运算符重载第14章继承第15章多态性第16章文件和流第17章异常第18章模板 第7章指针 讲授内容 指针的定义与运算指针与数组的关系字符串函数指针与const限定符传递指针参数动态内存分配方法函数指针 7 1指针的定义 指针 具有确定属性的地址属性决定了以该地址为起始地址的存储空间 数据单元 大小以及可以存放什么类型的数据指针变量 可以存放指针的变量 7 1指针的定义 charc 7 char chptr 7 1指针的定义 指针变量声明int myPtr 说明了一个指向int类型的指针变量myPtrint myPtr1 myPtr2 i j 可以说明指向任何数据类型的指针指针变量声明时可以初始化为0 NULL或某个地址0或NULL 不指向任何数据单元 推荐使用NULL 7 2指针的运算 使yPtr指向y 7 2指针的运算 一元运算 间接引用运算符 其操作数表达式的值必须是指针 如int yPtr y yptr 7 2指针的运算 和 例子1 指针的运算 的应用示例 includeintmain intn int nPtr n 7 nPtr 7 2指针的运算 指针的算术运算指针变量可以自增 自减 或 指针可以加 减一个整数 或 或 同类型指针可以相减一元运算符sizeof 操作数为变量名 类型名或常量运算结果为操作数所需存储单元的字节数特例 操作数为数组名时 结果为数组所需存储单元的总字节数如sizeof int sizeof int 均为4声明intmyArray 10 p myArray 后sizeof myArray 为40 sizeof p 为4 7 2指针的运算 Intv 5 vPtr v vPtr为3000vPtr 2 赋值后vPtr为3008把vPtr的值当作整数和n sizeof int 相加 得到vPtr n的实际值 指向后续第n个数组元素 7 2指针的运算 同类型指针相减intv 5 vPtr vPtr2 vPtr vPtr2 vPtr结果为2 把vPtr2和vPtr的值当作整数相减后除以sizeof int 两个指针间的数组元素个数 7 2指针的运算 指针的关系运算同类型指针可以进行各种关系运算可以判断指针是否为0或NULL如intv 5 vPtr vPtr2 vPtr 7 2指针的运算 指针的赋值运算同类型指针可以赋值不同类型的指针之间的赋值必须进行强制类型转换如int nPtr floatf 0 5 fPtr 特例 void类型的指针 类型void 可以指向任何类型的数据void 类型的指针不能被复引用可以和其他类型的指针相互赋值 7 2指针的运算 如void vPtr float fPtr vPtr fPtr fPtr vPtr 但下面这种情况不行 必须进行类型的强制转换void vPtr float fPtr int iptr vPtr fPtr iPtr vPtr 错误iPtr int vPtr 正确 例子2 指针运算例子 includeintmain charc A pc intints 5 1 2 3 4 5 p1 intm 6 n 7 int p2 p3 pc 例子2 指针运算例子 p1 4 printf Afterp1 4 tp1 p t p1 d n p1 p1 p2 程序运行结果 c A pc 0012FF7C pc A Afterpc 5 pc 0012FF81p1 0012FF64 p1 1Afterp1 4 p1 0012FF74 p1 5p2 0012FF5C p2 6p3 0012FF58 p3 7p2 p3 1p2 p3 7 3指针与数组 数组名是指向该数组第一个元素的常量指针intb 5 bPtr bPtr b 等价于bPtr 注 C 编译器把形如指针表达式 下标表达式 的下标运算转化为表达式 指针表达式 下标表达式 即地址 偏移量的方式 7 3指针与数组 指针数组 数组元素可以是指针如 int array 10 i array 5 suit的每个元素是一个字符 char 指针字符串中的字符并没有存放在数组中 数组中存放的是指向字符串的指针suit数组的元素数目是固定的 但字符串的长度可以不相等 7 3指针与数组 指针数组suit的存储结构 7 4常用字符串处理函数 库文件string h 求字符串长度 intstrlen constchar s 字符串拷贝 char strcpy char dest constchar src 字符串连接 char strcat char dest constchar src 字符串比较 intstrcmp constchar s1 constchar s2 7 4常用字符串处理函数 库文件string h 在字符串中查找字符 char strchr constchar s intc 在字符串中反向查找字符 char strrchr constchar s intc 在字符串中查找字符串 char strstr constchar s1 constchar s2 打断字符串 char strtok char s char delim 例子3 字符串处理函数strtok的应用 include includemain chars HelloC World char d char p p strtok s d while p printf s n p p strtok NULL d return0 7 5使用const限定符 最低访问原则 良好的程序设计风格可用于不允许被修改的变量和形式参数 数据保护声明const变量时需要初始化constintstudNum 100 7 5使用const限定符 指向常量数据的非常量指针inti j q constint p p 不允许 7 5使用const限定符 指向非常量数据的常量指针intvar1 var2 int constp 错误 7 5使用const限定符 指向常量数据的常量指针constintval 10 constint constp 允许 7 5使用const限定符 用于限定函数形式参数 以保护实参voidoutput constdouble pd cout pd 允许 pd 15 5 不允许 或voidoutput constdouble 不允许 7 6指针和引用 指针和引用都可以实现通过一个变量访问另一个变量inta int aptr 修改了变量a 例子4 参数为指针的函数 includevoidswap int int intmain intx 10 y 20 swap 例子5 用指针实现冒泡排序函数 voidswap int a int b inttemp temp a a b b temp voidbubbleSort int array intsize intpass j for pass 0 pass size 1 pass for j 0 j size pass 1 j if array j array j 1 swap 7 7动态内存分配 静态内存分配声明变量 编译时可以确定所需内存空间大小栈式分配动态内存分配编译时可以确定所需内存空间大小 运行时分配通过malloc函数或运算符new实现和malloc函数对应的释放内存函数是free和new对应的释放内存运算符是delete有可能分配不成功堆式分配 7 7动态内存分配 使用函数malloc和函数freevoid malloc unsignedsize 例如 int p int malloc sizeof int p int score int malloc sizeof int 10 if score NULL for intj 0 j score j voidfree void ptr 如 free p free score 7 7动态内存分配 使用new和delete运算符new运算符int p newint p int score newint 10 for intj 0 j score j 使用delete运算符释放内存 如deletep delete score 例子6 对运行时指定数目的整数进行排序 include includevoidsortArray int int voiddisplayArray int int intmain int a inti num cout num a newint num if a NULL cout mallocerror exit endl return1 例子6 对运行时指定数目的整数进行排序 for i 0 i a i sortArray a num cout Aftersorting endl for i 0 i num i cout a i cout endl delete a return0 例子6 对运行时指定数目的整数进行排序 voidsortArray intb intlen for intpass 0 passb i inthold b pass b pass b i b i hold 学习目的检测 理解指针的概念掌握传递指针参数的机制理解指针 数组与字符串之间的关系掌握内存分配和释放的方法了解指针函数的作用 作业 7 2 7 4 7 9 7 10上机 7 6 7 12 7 13 第8章结构 联合 枚举 讲授内容 结构的定义与使用联合的定义与使用枚举的定义与使用 8 1结构 逻辑上相关的数据的汇集其成员可以是任何类型结构可以拥有不同类型的成员 区别于数组 定义记录 新的数据类型和指针一起构成链表 栈 队列和树等数据结构和类 class 的定义非常相似 8 1 1结构的定义 格式 struct 例子 structstudent intnum charname 20 charsex floatscore 8 1 1结构的定义 解释 struct 保留字 表示开始定义结构studentstudent 结构名 用于说明结构类型的变量student有四个成员 int类型的num char类型的数组name和变量sex以及float类型的score结构的定义以分号结尾 8 1 1结构的定义 说明 结构成员不能是本结构的实例结构成员可以是指向本结构类型的指针结构定义不导致内存分配定义新类型 8 1 1结构的定义 声明结构变量studentstud1 stud2 sptr stu 20 定义结构时同时声明结构变量structstudent intnum charname 20 charsex floatscore stud1 stud2 8 1 1结构的定义 结构的定义可以嵌套structdate intyear intmonth intday structpeople intnum charname 20 charsex datebirthday structpeoplewang 8 1 1结构的定义 结构变量的初始化studentstud5 102 LiXiaoming M 92 8 1 2引用结构变量成员 结构变量的赋值stud1 stud2 存取结构的成员点操作符 和结构变量名一起使用printf s stud1 name wang birthday year 1986 箭头操作符 和结构指针名一起使用sptr sptr name等价于 sptr name 8 2 1结构与函数 预定义类型的结构成员可以作为普通变量使用假设有如下函数定义 voidf1 int voidf2 float voidf3 char voidf4 int voidf5 float 声明结构变量 structstudentstud 8 2 1结构与函数 下面的函数调用是合法的 f1 stud num 传递stud num的值f1 stud name 2 传递数组元素stud name 2 的值f2 stud score 传递stud score的值f3 stud name 传递数组stud name的值 即第一个元素的地址f3 stud name 2 传递数组元素stud name 2 的地址f4 stud num 传递成员stud num的地址f5 stud score 传递成员stud score的地址 8 2 1结构与函数 结构变量也可以作函数的参数或返回值函数原型 voidf6 students voidf7 student 例子1 结构变量作为函数的参数 includestructstudent intnum charname 20 charsex floatscore voidfunCallByValue student voidfunCallByReference student 例子1 结构变量作为函数的参数 voiddisplayStudentInfo conststudent 例子1 结构变量作为函数的参数 intmain studenttheStud 102 LiXiaoming M 92 cout Initialinformation displayStudentInfo theStud funCallByValue theStud cout nAftercallbyvalue displayStudentInfo theStud funCallByReference theStud cout nAftercallbyreference displayStudentInfo theStud funCallByPointer 程序执行结果 Initialinformation num 102name LiXiaomingsex Mscore 92Aftercallbyvalue num 102name LiXiaomingsex Mscore 92Aftercallbyreference num 102name LiXiaomingsex Mscore 93Aftercallbypointer num 102name LiXiaomingsex Mscore 94 例子2 函数返回结构变量 includestructstudent intnum charname 20 charsex floatscore studentgetStudent voiddisplayStudentInfo conststudent 例子2 函数返回结构变量 studentgetStudent studentstud cout stud num cout stud name cout stud sex cout stud score returnstud 例子2 函数返回结构变量 intmain studenttheStud 102 LiXiaoming M 92 cout Initialstudentinformation displayStudentInfo theStud theStud getStudent cout nAftercallgetStudent displayStudentInfo theStud return0 程序执行结果 Initialstudentinformation num 102name LiXiaomingsex Mscore 92Pleaseenterthenumber 105Pleaseenterthename JohnPleaseenterthesex MPleaseenterthescore 95AftercallgetStudent num 105name Johnsex Mscore 95 8 2 2结构与数组 结构数组 结构类型的数组元素structstudent intnum charname 20 charsex floatscore class 5 例子3 将学生记录按学号大小排序 include defineSTUDENT Num5structstudent intnum charname 20 charsex floatscore voiddisplayStudentsInfo conststudentstuds intlen for inti 0 i len i cout num studs i num t cout name studs i name t cout sex studs i sex t cout score studs i score endl 例子3 将学生记录按学号大小排序 voidsortArray studentstuds intlen for intpass 0 passstuds i num studenthold hold studs pass studs pass studs i studs i hold 例子3 将学生记录按学号大小排序 intmain studenttheClass STUDENT Num 110 ZhangPing M 45 102 LiXiaoming M 92 153 WangMing M 52 5 134 ChengLing F 87 105 WangXiaofang F 95 cout Initialstudentinformation n displayStudentsInfo theClass STUDENT Num cout nAftersorting n sortArray theClass STUDENT Num displayStudentsInfo theClass STUDENT Num return0 程序执行结果 Initialstudentinformation num 110name ZhangPingsex Mscore 45num 102name LiXiaomingsex Mscore 92num 153name WangMingsex Mscore 52 5num 134name ChengLingsex Fscore 87num 105name WangXiaofangsex Fscore 95Aftersorting num 102name LiXiaomingsex Mscore 92num 105name WangXiaofangsex Fscore 95num 110name ZhangPingsex Mscore 45num 134name ChengLingsex Fscore 87num 153name WangMingsex Mscore 52 5 8 2 3结构与指针 声明结构指针变量student pStud stud pStud 使用结构指针变量 pStud numpStud num 例子4 结构指针变量的声明和使用 includestructstudent intnum charname 20 charsex floatscore intmain studentstud 102 LiXiaoming M 92 student pStud 例子4 结构指针变量的声明和使用 通过指针访问结构 使用圆点运算符访问成员cout n coutnumnamesexscore endl return0 程序执行结果 Accessstructurethroughstructurevariable num 102name LiXiaomingsex Mscore 92Accessstructurethroughpointerand num 102name LiXiaomingsex Mscore 92Accessstructurethroughpointerand num 102name LiXiaomingsex Mscore 92 8 2 4 8 3位段联合 设计程序时C 为了节省空间提供的解决方法空间问题不是程序设计的主要问题 感兴趣的同学可以自己看看 8 4枚举 枚举用标识符表示的整数集合enumweekday Sun Mon Tue Wed Thu Fri Sat 枚举常量 与一般符号常量类似 自动定值起始值为0开始 递增值为1可以用 为枚举常量定值枚举定义中的标识符必须唯一枚举变量声明 与一般变量相同枚举变量只能被赋予相应的枚举常量 8 4 1定义枚举型变量 枚举举例enumweekday Sun 1 Mon Tue Wed Thu Fri Sat enumweekday Sun 1 Mon Tue 5 Wed Thu Fri 10 Sat 枚举变量的使用weekdayday day mon day weekday 2day 2 error 学习目的检测 能够建立和使用结构 联合 枚举掌握通过传值 传引用 传指针等方式为函数传递结构参数的方法 作业 8 38 68 10 第9章链表 讲授内容 自引用结构 链表的概念内存的动态分配和释放单向链表的定义与操作双向链表的定义与操作 9 1链表的基本概念 结构数组 必须将数组的大小设定成足够大的值太浪费能否需要多少分配多少 链表 动态内存分配 结构 指针所有结构形成一条链可以在任何地方插入或删除元素 9 2单向链表 自引用结构结构中包含指向同类型结构的指针通过指针连接成链表 终点是NULL指针 0 9 2 1单向链表定义 例子 structnode intdata node next next 指向下一个node类型的结构 连接node的纽带 9 2 1单向链表定义 存放学生信息的链表节点structstudent intnum charname 20 charsex floatscore student next 动态申请内存的方法student p student malloc sizeof student 或student p newstudent 9 2 2单向链表的操作 建立单向链表声明一个链首指针变量head 并赋初值NULL 包含0个节点的链表 动态分配一个新节点 将该节点链入链尾重复上一步 例子1 建立链表 读入n个整数 每个整数作为一个新结点插入到链尾 includestructnode intdata node next node createList intn intmain intn node listHead NULL cout n if n 0 listHead createList n return0 例子1 建立链表 读入n个整数 每个整数作为一个新结点插入到链尾 node createList intn node temp tail NULL head NULL intnum cin num head newnode 为新节点动态分配内存if head NULL coutdata num head next NULL tail head 例子1 建立链表 读入n个整数 每个整数作为一个新结点插入到链尾 for inti 0 i num temp newnode 为新节点动态分配内存if temp NULL coutdata num temp next NULL tail next temp tail temp returnhead 建立链表过程 建立链表过程 9 2 2单向链表的操作 遍历链表依次访问链表中的每个节点的信息head data 15 head next data 15 一般遍历方法node curNode head while curNode curNode curNode next 例子2 编写一个函数 输出例1链表中各节点的data成员的值 voidoutputList node head coutdata if curNode next cout curNode curNode next cout endl return 例子3 编写一个函数 在例1的链表中查找包含指定整数的节点 node findData intn node head node curNode head while curNode if curNode data n coutnext cout Can tfind n inthelist endl returnNULL 9 2 2单向链表的操作 在链表中节点a之后插入节点c 1 指针cptr指向节点c aptr指向节点a 2 把a后继节点的地址赋给节点c的后继指针cptr next aptr next 3 把c的地址赋给节点a的后继指针aptr next cptr 例子4 编写一个函数 将输入的整数从小到大插入链表 node insertData intn node head node curNode head 指向插入点的后节点node preNode NULL 指向插入点的前节点node newNode NULL 指向新建节点while curNode NULL 例子4 编写一个函数 将输入的整数从小到大插入链表 newNode data n if preNode NULL 插入到链表头 newNode next curNode returnnewNode else preNode next newNode newNode next curNode returnhead 9 2 2单向链表的操作 从链表中删除一个节点c 1 在链表中查找要删除的节点c 用指针cptr指向节点c 2 如果c有前驱节点 设为d 用指针dptr指向d 则将d的后继指针指向c的后继节点 dptr next cptr next 3 释放c占用的空间 例子5 编写一个函数 删除链表中包含指定整数的节点 node deleteData intn node head node curNode head 指向当前节点node preNode NULL 指向当前节点的前驱节点while curNode 返回链首指针 9 3双向链表 单向链表 有利于从链首向链尾遍历有些时候双向遍历是需要的 双向链表 9 3 1双向链表的定义 定义双向链表的节点 structnode intdata node next 指向后续节点node pre 指向前面的节点 9 3 1双向链表的定义 双向链表的例子 双向链表一般也由头指针唯一确定双向链表首尾相接可以构成双向循环链表 9 3 2双向链表的操作 建立双向链表新节点链入链尾原链尾节点的后继指针指向新节点新节点的前驱指针指向原链尾节点新链尾节点的后继指针置为空指针将新节点链入链头原链头节点的前驱指针指向新节点新节点的后继指针指向原链头节点新链头节点的前驱指针置为空指针 例子6 编写一个函数 按数据输入的顺序建立双向链表 node createBidirList intn node temp tail NULL head NULL intnum cin num head newnode 为新节点动态分配内存if head NULL coutdata num head next NULL head pre NULL tail head 例子6 编写一个函数 按数据输入的顺序建立双向链表 for inti 0 i num temp newnode 为新节点动态分配内存if temp NULL coutdata num temp next NULL temp pre tail tail next temp tail temp returnhead 9 3 2双向链表的操作 双向链表的遍历有链首节点 则可以沿着后继指针从头至尾遍历有链尾节点 则可以沿着前驱指针从尾向头遍历 例子7 编写一个函数 输出双向链表中各节点的data成员的值 voidoutputBidirList node head coutpre coutdata if curNode next cout curNode curNode next cout endl return 9 3 2双向链表的操作 在双向链表中插入和删除一个节点优点 获取插入节点或被删除节点的前驱和后继节点比较方便注意点 需要维护的指针较多 例子8 编写函数 将整数n插入到一个已排序的双向链表中 从小到大 node insertData intn node head node curNode head 指向插入点的后节点node preNode NULL 指向插入点的前节点node newNode NULL 指向新建节点 寻找插入位置while curNode NULL 例子8 编写函数 将整数n插入到一个已排序的双向链表中 从小到大 newNode data n if preNode NULL 链头newNode next curNode newNode pre NULL if curNode NULL curNode pre newNode returnnewNode if curNode NULL 链尾newNode pre preNode preNode next newNode newNode next NULL returnhead 例子8 编写函数 将整数n插入到一个已排序的双向链表中 从小到大 else 链中preNode next newNode newNode next curNode newNode pre preNode curNode pre newNode returnhead 例子9 编写函数 在双向链表中查找并删除指定 node deleteData intn node head node curNode head 指向当前节点while curNode 例子9 编写函数 在双向链表中查找并删除指定 if curNode pre NULL head head next head pre NULL else curNode pre next curNode next if curNode next NULL curNode next pre curNode pre deletecurNode returnhead 返回链首指针 学习目的检测 理解自引用结构和链表的含义掌握通过动态分配和释放内存来建立和维护链表 作业 上机 9 19 29 6 第10章面向对象程序设计基本概念 讲授内容 面向对象程序设计方法的产生和发展面向对象程序设计语言面向对象程序设计的特点类和对象的基本概念消息 10 1面向对象语言和方法 1 6 六十年代末期 Simula67 面向对象语言的鼻祖 包含了类和继承的概念类 描述特性相同或相近的一组对象的结构和行为继承 将多个类组织成层次结构 实现数据和操作的共享 10 1面向对象语言和方法 2 6 七十年代末八十年代初 Smalltalk 第一个真正的集成开发环境 包含类和继承 更严格的信息隐藏带有一个巨大的 标准类库第一个使用MVC Model View Controller 模式开发交互式应用软件 10 1面向对象语言和方法 3 6 Smalltalk使面向对象方法为人们注目面向对象语言被分为两大阵营纯粹的面向对象语言 Smalltalk Eiffel Java混合型面向对象语言 C 和CLOS基于对象的语言 Ada支持数据抽象类型 包 函数和运算符重载 多态性 但不支持继承 10 1面向对象语言和方法 4 6 结构化程序设计软件的结构化分析 设计方法工程化的概念的方法但无法很好地支持越来越复杂 庞大的系统需求面向对象方法直接将问题的求解映射到问题本身上有目的地将系统分解为模块将问题分解为一系列的实体 对象 方便设计 可维护性 可扩充性好 10 1面向对象语言和方法 5 6 简单的例子 图书馆管理系统包含reader 读者 对象 librarian 图书管理员 对象 bookshelf 书架 对象等所有的操作由各对象协作完成借书reader对象向librarian对象提出借书请求librarian对象向bookshelf对象提出查书和取书请求然后逐步响应 逐步返回 共同完成借书操作万物皆对象 10 1面向对象语言和方法 6 6 面向对象方法的一些特性程序设计的重点在数据而不是函数程序由对象组成对象之间通过相互协作来完成功能大多数对象的定义以数据为中心函数与相关的数据紧密结合数据可以被隐藏很容易扩充新的数据和函数 10 2类 对象和消息 1 10 面向对象程序设计的一般步骤分析实际问题 分辨并抽取其中的类和对象设计相应的类 并根据这些类创建各种对象协调这些对象完成程序功能 消息 10 2类 对象和消息 2 10 万物皆对象每个学生 每个班级 每个学校 每个国家 每棵树 每本书 每部汽车 具体的实体 张三 李四 都是对象 但 人 不是 人 不是具体的实体 是类 是抽象概念类是某些对象共同特征的表示类是创建对象的模板 对象是类的实例 10 2类 对象和消息 3 10 如何区分类和对象 以 人 和 张三 为例 人 描述了所有人 包括 张三 都具有的属性和行为 如有姓名 身高 体重 有鼻子 眼睛 四肢 能交流 能思维等等类 人 描述的概念是抽象的 人 的姓名是什么 人 的身高是什么 对象 张三 是具体的 张三 的姓名是 张三 张三 的身高是185CM 10 2类 对象和消息 4 10 还有哪些类和对象的例子教室 301 105教室国家 中国学校 国防科技大学 例子 读者类Reader classReader public Reader 构造函数intregistration char name 注册intborrowBook intbookNo 借书intreturnBook intbookNo 还书private char name 姓名char certifNo 借书证号 10 2类 对象和消息 5 10 格式说明类的定义以关键字class开头class后面是类名 Reader 类名后面花括号扩起来的部分是类的体类的定义以分号结尾 10 2类 对象和消息 6 10 内容说明类的定义可以包含数据和函数关键字public后面定义了类的公有成员类Reader有四个公有成员函数 Reader registration 注册 borrowBook 借书 和returnBook 还书 关键字private后面定义的是类的私有成员类Reader包含两个私有数据成员 姓名 name 和借书证号 certifNo 数据成员和成员函数都可以是私有的或公有的 10 2类 对象和消息 7 10 自定义类是一种新的自定义类型 可以声明变量 指针 数组等对象各自拥有自己的数据空间 互不干扰Readerzhang 声明Reader类的对象zhangReaderreader 1000 声明Reader类的数组Reader rptr 声明Reader类型的引用 10 2类 对象和消息 8 10 对象可以响应消息对象zhang可以响应registration 注册 borrowBook 借书 和returnBook 还书 三种消息要对象zhang借书可以向对象zhang发borrowBook消息对象zhang则通过执行成员borrowBook来响应消息 10 2类 对象和消息 9 10 C 将 向对象发消息 处理成 调用对象的某个成员函数 调用对象zhang的成员函数borrowBookzhang borrowBook 12 rpt borrowBook 12 ref borrowBook 12 10 2类 对象和消息 10 10 消息机制的特性同一对象可以接收不同的消息 并有不同的响应 如对象zhang可接收注册 借书 还书三种消息给不同对象发送同一消息会产生不同的效果 对消息的响应不是必须的 对象可以响应消息 也可以忽略某些消息对象之间是平等的 每个对象都可以向其它对象发消息 让其为自己服务 10 3面向对象程序设计特点 1 5 抽象和封装抽象 提取和表现事物的核心特性 不描述背景细节类的定义是对实体的抽象和描述 定义类Reader时 要描述哪些特性 封装 把数据及与数据相关的操作组织在一个单独的程序单元 对象 中结构清晰 对象之间的独立性好 接口关系简单 可扩充性和可维护性好 10 3面向对象程序设计特点 2 5 数据隐藏和访问机制对象对内部数据提供了不同级别的保护对象私有的代码和数据不能被外界直接访问外界只能通过公有成员函数和对象交互有效地保护数据 提高程序的可维护性 10 3面向对象程序设计特点 3 5 继承继承允许从现有的类 基类 建立新类 派生类 派生类继承了基类的属性和行为派生类可以修改和扩充这些属性和行为派生类可以增加新的数据成员和函数成员派生类对象被认为是基类的对象 方便统一管理提高软件开发的效率和软件质量 10 3面向对象程序设计特点 4 5 多态性程序设计中很多类可以通过继承的关系构成树形结构多态性使程序员可以通过统一的接口操纵这些类的对象对于同一条函数调用语句不同的对象会执行不同的操作 10 3面向对象程序设计特点 5 5 面向对象技术的优点易于建模易于维护可扩展性好代码重用 10 4面向对象程序的结构 面向对象程序设计的任务设计类以类为模板创建不同的对象协调这些对象共同工作面向对象程序仍然需要一个入口 main函数 例子1 编写一个雇员类Employee并测试它 1 3 include includeclassEmployee public Employee char n 构造函数name newchar strlen n 1 strcpy name n Employee 析构函数delete name 例子1 编写一个雇员类Employee并测试它 2 3 voidsetSalary doubles salary s voidprintSalary cout Mysalaryis salary endl voidwhoAreYou cout endl Mynameis name n private char name doublesalary 例子1 编写一个雇员类Employee并测试它 3 3 main 声明类Employee的对象a和bEmployeea ZhangShan b LiSi a setSalary 123 4 给对象a发消息setSalaryb setSalary 156 7 给对象b发消息setSalarya whoAreYou 给对象a发消息whoAreYoua printSalary 给对象a发消息printSalaryb whoAreYou 给对象b发消息whoAreYoub printSalary 给对象b发消息printSalaryreturn1 程序执行结果 MynameisZhangShan Mysalaryis 123 4 MynameisLiSi Mysalaryis 156 7 学习目的检测 了解面向对象程序设计方法相对于结构化程序设计方法的优点了解面向对象语言的特点掌握类 对象和消息在面向对象程序设计中的作用了解面向对象程序设计的结构 作业 10 110 310 7 第11章类与对象 讲授内容 数据抽象的概念类的特点和作用类的定义类的访问控制类的数据成员和成员函数类的静态成员类的对象类的构造函数和析构函数 11 1数据抽象的概念 1 4 对象 描述问题空间的实体程序设计的角度 对数据和操作的封装真实世界的角度 问题空间的实体问题空间的哪些实体需要描述 对于一个实体 对象需要描述该实体的哪些方面 11 1数据抽象的概念 2 4 用面向对象的方法描述一个系统设计的系统中的对象必须能很好地描述问题空间的实体读者Reader怎么描述 对象之间必须能互操作或互通消息读者Reader和图书馆管理员librarian之间如何互操作对象之间必须允许存在某种关系 如包含关系等 11 1数据抽象的概念 3 4 数据抽象 忽略一个主题中与当前问题无关的方面 以便更充分地注意与当前问题有关的方面不是去了解和描述问题的全部只是选择其中相关的一部分 11 1数据抽象的概念 4 4 数据抽象的步骤确定问题空间 明确要解决的问题图书馆管理系统要解决的问题是什么 确定问题空间的实体哪些实体和要解决的问题相关对实体进行抽象对于每一个实体 确定要描述的东西用数据结构和函数描述上面的结果 11 2抽象数据类型 1 13 对问题空间的实体进行抽象包含哪些属性 数据 和功能 函数 抽象的结果 对数据和函数的封装类 class 抽象数据类型 实现对数据和函数的封装自定义类是一种新的数据类型 11 2抽象数据类型 2 13 结构化程序设计全局数据 变量 数组 结构等 具有文件作用域任何函数都可以访问他们程序可维护性差 11 2抽象数据类型 3 13 类和对象的封装和访问控制封装是面向对象的重要特征之一类封装了数据和函数类定义了函数和数据的访问控制属性哪些成员可被外界直接访问哪些成员只能被自己的成员函数访问提高了程序的可维护性类的数据成员最好都是私有的 11 2抽象数据类型 4 13 接口与实现的分离类的使用者关心类的接口 类的公有数据成员和函数 即他能访问的部分类的设计者关心类的实现接口与实现的分离使程序员能将精力集中到自己关心的部分接口与实现的分离有利于多人 方 合作 例子1 用结构实现栈 1 5 ex11 1 cpp includestructStack 结构定义int data 栈数据存储intmemNum 栈元素个数intsize 栈大小 intinitStack Stack 函数原型 例子1 用结构实现栈 2 5 初始化栈intinitStack Stack 例子1 用结构实现栈 3 5 弹栈 无数据时返回0 否则返回1intpopStack Stack 例子1 用结构实现栈 4 5 main inti num StacknewStack initStack newStack 10 cout Pushintegerstostack endl for i 0 i 10 i cout i pushStack newStack i cout endl cout FromfunctionpopStack endl for i 0 i 10 i if popStack newStack num cout num cout endl endl 例子1 用结构实现栈 5 5 for i 10 i 20 i newStack data newStack memNum i cout ReadingfromstructnewStack endl for i 0 i 10 i cout newStack data i cout endl for i 10 i 20 i cout newStack data i cout endl delStack newStack return0 程序运行结果 Pushintegerstostack 0123456789FromfunctionpopStack 9876543210ReadingfromstructnewStack 10111213141516171819 33
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年秋部编版三年级上册语文课堂氛围营造计划
- 餐饮行业服务质量目标及保障措施
- 部门自查自纠整改报告
- 部编版历史八年级上册教学能力提升计划
- 小学班主任创新教学法培训计划
- 幼儿园师德师风督导自查及整改措施
- 新生家长见面会课件
- 非肿瘤病人恶心呕吐的护理
- 化疗前病人的护理
- 心内科工休会实施规范
- 课题3 物质组成的表示(第1课时)九年级化学上册教学设计(人教版2024)
- 非法入侵应急预案
- 工业自动化设备调试流程
- 车辆救援服务方案
- DBJ15-22-2021-T 锤击式预应力混凝土管桩工程技术规程(广东省)
- 《跨境电子商务基础》课件-项目一 跨境电子商务认知一二三
- 园林工程技术专业建设规划
- 2024年北京版小学英语必背单词表
- 经桡动脉全脑血管造影术围手术期护理
- JT-T 1495-2024 公路水运危险性较大工程专项施工方案编制审查规程
- 八年级化学上册期末考试卷及答案【必考题】
评论
0/150
提交评论