C程序设计(自考4737)第2章.ppt

上传人:max****ui 文档编号:6330850 上传时间:2020-02-23 格式:PPT 页数:61 大小:1.66MB
返回 下载 相关 举报
C程序设计(自考4737)第2章.ppt_第1页
第1页 / 共61页
C程序设计(自考4737)第2章.ppt_第2页
第2页 / 共61页
C程序设计(自考4737)第2章.ppt_第3页
第3页 / 共61页
点击查看更多>>
资源描述
第二章从结构到类的演变 2 1结构的演化 结构发生质的演变1 函数与数据共存 C 允许结构中定义函数 成为成员函数在结构中同时定义成员变量与成员函数使用格式 结构对象 成员变量结构对象 成员函数 第二章从结构到类的演变 1 函数与数据共存 结构的定义 structpoint doublex y voidSetxy doublea doubleb x a y b voidDisplay cout x t y endl 第二章从结构到类的演变 1 函数与数据共存 结构的定义 structpoint doublex y voidSetxy doublea doubleb x a y b voidDisplay cout x t y endl 数据成员 成员函数 第二章从结构到类的演变 1 函数与数据共存 结构的定义 第二章从结构到类的演变 运行结果 第二章从结构到类的演变 主函数 完整程序 修改后的程序 第二章从结构到类的演变 2封装若定义结构体时 使用了private关键字 则产生封装性 使用了private关键字 则产生封装性 第二章从结构到类的演变 2封装在定义结构时 若使用了private则产生封装性 表示成员为私有的 只能在结构体内部通过公有成员函数使用 若未添加private则表示默认为public 类定义时默认为private 第二章从结构到类的演变 2 1 2使用构造函数初始化结构的对象在定义结构时 与结构同名的函数称为构造函数 若定义的函数与某个已定义函数重名而参数类型或个数不同 则称为函数重载 2 1 2使用构造函数初始化结构的对象 问题 那个函数是构造函数 那个函数被重载了 结构体的定义 2 1 2使用构造函数初始化结构的对象 注 构造函数在定义结构体对象时自动执行 并根据是否初始化来自动选择所调用的构造函数 2 1 2使用构造函数初始化结构的对象 2 1 2使用构造函数初始化结构的对象 第二章从结构到类的演变 2 2从结构演化成一个简单的类 将程序中struct替换为class即变为类的标准定义形式 第二章从结构到类的演变 2 2从结构演化成一个简单的类 产生类对象p1 p2 为对象的属性赋值 显示对象属性值 第二章从结构到类的演变 2 2从结构演化成一个简单的类 类图的表示 类名 类属性 成员变量 类操作 成员函数 第二章从结构到类的演变 2 3面向过程和面向对象 简单了解对象的含义 第二章从结构到类的演变 2 3面向过程和面向对象 简单了解对象的含义 第二章从结构到类的演变 2 3面向过程和面向对象 简单了解对象的含义 第二章从结构到类的演变 面向过程的求解步骤给出三角形三个顶点坐标 计算三边长 并输出步骤 输入x1 y1 x2 y2 x3 y3六个数据计算 x1 y1 和 x2 y2 距离计算 x1 y1 和 x2 y2 距离计算 x1 y1 和 x2 y2 距离输出三个距离 第二章从结构到类的演变 面向对象的求解步骤给出三角形三个顶点坐标 计算三边长 并输出 设计类将点设计为一个类 并提供相关的属性和操作 第二章从结构到类的演变 面向对象的求解步骤给出三角形三个顶点坐标 计算三边长 并输出 定义对象同时给出坐标pointA x1 y1 pointB x2 y2 pointC x3 y3 第二章从结构到类的演变 面向对象的求解步骤给出三角形三个顶点坐标 计算三边长 并输出 定义对象 然后获取坐标pointA pointB pointC A Getx A Gety B Getx B Gety C Getx C Gety 第二章从结构到类的演变 面向对象的求解步骤给出三角形三个顶点坐标 计算三边长 并输出 计算距离并输出AB A GetLength B AC A GetLength C BC B GetLength C 第二章从结构到类的演变 2 4C 面向对象程序设计特点 2 4 1对象三要素 对象名 属性 操作 第二章从结构到类的演变 2 4C 面向对象程序设计特点 2 4 1对象三要素 对象名 属性 操作 第二章从结构到类的演变 2 4C 面向对象程序设计特点 2 4 2抽象和类 面向对象鼓励程序员以抽象的观点看待程序 即程序是由一组抽象组成的 另一方面 我们又可以将一组对象的共同特征时一步抽象出来 从而形成 类 概念 抽象是一种从一般的观点看待事物的方法 它要求程序员集中于事物的本质特征 而是具体细节或具体实现 面向对象鼓励程序员以抽象的观点看待程序 也就是说 程序是一组抽象的对象 类组成的 严格讲 C 程序不是这样 在程序中还有像mail这样的全局函数 程序员从一组对象为起点 抽取公共的行为将其放入到一个类中 这基本上是抽象分类的观点 不同类的对象具有不同的行为 类的概念来自于人们认识自然 认识社会的过程 在这一程中 人们主要使用两种方法 由特殊到一般的归纳法和由一般到特殊的演绎法 在归纳的过程中 我们从 一个个具体的事物中把共同的特征抽取出来 形成一个一般的概念 这就是 归类 在演绎的过程中我们又把同类的事物 根据不同的特征分成不同的小类 这又是 分类 对于一个具体的类 它有许多具体的个体 我们就管这些个体叫做 对象 举个例子 人 是一个类 具有 直立行走 会使用工具 等一些区别于其它事物的共同特征 而张三 李四 王五等一个个具体的人 就 人 这个类的一个个 对象 第二章从结构到类的演变 2 4C 面向对象程序设计特点 2 4 3封装 在C 语言中 类是支持数据封装的工具 对象是数据封装的实现 按照面向对象的封装原则 一个对象的属性和操作是紧密结合的 对象的属性只能由这个对象的操作来存取 对象的操作分为内部操作和外部操作 内部操作只供对象内部的其他操作使用 不对外提供 外部操作对外提供一个消息接口 通过这个接口接收对象外部的消息并为之提供操作 服务 对象内部数据结构的这种不可访问性称为信息 数据 隐藏 数据封装给数据提供了与外界联系的标准接口 无论是谁 只有通过这些接口 使用规范的方式 才能访问这些数据 同时 由于程序员总是和接口打交道 他也就不必要了解数据的具体细节 简言之 封装就是把对象的属性和操作结合成一个独立的系统单位 并尽可能隐蔽对象的内部细节 由此可见 封装要求一个对象应具备明确的功能 并具有接口以便和其他对象相互作用 同时 对象的内部实现 代码和数据 是受保护的 外界不能访问它们 封装使得一个对象可以像一个部件一样应用在各种程序中 而不用担心对象的功能受到影响 数据封装一方面使得程序员在设计程序时可以专注于自己的对象 同时也切断了不同模块之间数据的非法使用 减少了出错的可能性 在类中 封装是通过存取权限实现的 例如将每个类的属性和操作分为私有的和公有的两种类型 对象的外部只能访问对象的公有部分 不能直接访问对象的私有部分 第二章从结构到类的演变 2 4C 面向对象程序设计特点 2 4 4继承 对象的另一个特点是继承 继承是一个对象可以获得另一个对象的特性的机制 它支持层次类这一概念 例如水果类包括香蕉 苹果 橘子和菠萝 而苹果类又有香蕉苹果 富士苹果 国光苹果 京帅苹果等 通过继承 低层的类只须定义特定于它的特征 而共享高层类中的特征 继承具有重要的实际意义 它简化了人们对事物的认识和描述 例如我们知道苹果是可以吃的 富士苹果继承了苹果的特征 当然也可以吃 再如我们认识了轮船的特征之后 就知道客轮是轮船的特殊种类 它具有轮船的特征 当研究客轮时 只要把精力用于发现和描述客轮独有的那些特征即可 C 语言允许单继承和多继承 继承是面向对象语言的重要特性 一个类可以生成它的派生类 派生类还可以再生成它的派生类 派生类继承了基类成员 另外它还可以定义自己的成员 继承是实现抽象和共享的一种机制 第二章从结构到类的演变 2 4C 面向对象程序设计特点 2 4 5多态性 C 语言支持多态性 例如允许函数重载和运算符重载 定义虚函数 通过它来支持动态联编等 函数的重载就是可以定义相同名字的函数 实现不同的功能 这种不同的对象可以调用相同名称的函数 并导致完全不同的行为的现象称为多态性 利用多态性 程序中只需进行一般形式的函数调用 函数的实现细节留给接受函数调用的对象 这大大提高了我们解决复杂问题的能力 举个最简单的例子 将两个数 相加 这两个数可以是整数或实数 将 看作一个特殊函数 则5 9和3 6 6 8都是使用 来完成两个数相加的功能 这就是 体现的多态性 类的多态性更多的内容 将留在后面章节讨论 这里不再赘述 动态联编也是多态性的一个重要特征 第二章从结构到类的演变 2 5使用类和对象 2 5 1使用string对象 类名 类的属性用于存放字符串 类的操作 方法 成员函数 第二章从结构到类的演变 2 5使用类和对象 2 5 1使用string对象 该类是C 语言中的内部预定义类 要在程序中使用该类时必须添加头文件 inculude 第二章从结构到类的演变 2 5使用类和对象 2 5 1使用string对象 类的初始化 stringstr1 A stringstr1 A stringstr1 AB stringstr1 AB 可以以数组的形式使用str1对象中的字符串str1 0 的值是 str1 1 的值是 2 5 1使用string对象 类的初始化 stringstr1 hello stringstr2 world 可以以数组的形式使用str1对象中的字符串str1 0 的值是 str2 0 的值是 2 5 1使用string对象 2 5 1使用string对象 运行结果 2 5 1使用string对象 string对象允许使用 运算 2 5 1使用string对象对象的方法 操作 成员函数 对象名 成员函数str1 size String对象可使用 运算Str1 str2 str3若str2 hello str3 everyone 则str1的结果是 2 5 2使用string对象的成员函数成员函数使用格式 对象名 成员函数例如 str1 size 若Str1 everyone Str1 size 值为 9 2 5 2使用string对象的成员函数成员函数使用格式 对象名 成员函数例如 str1 substr 若Str1 everyone Str1 substr 3 3 值为 one C 中字符串中字符位置计数从0开始 2 5 2使用string对象的成员函数成员函数使用格式 对象名 成员函数例如 str1 substr C 中字符串中字符位置计数从0开始 2 5 2使用string对象的成员函数成员函数使用格式 对象名 成员函数例如 str1 find 要查找的字符串 开始位置 结果为子串的位置 C 中字符串中字符位置计数从0开始 2 5 2使用string对象的成员函数getline函数的使用功能 利用cin函数输入一行字符串存入对象例如 getline cin str1 n 2 5 2使用string对象的成员函数getline函数的使用功能 利用cin函数输入一行字符串存入对象例如 getline cin str1 n 简单应用 日期格式转换 2 5 3使用complex对象complex类用于定义一个复数对象使用时添加头文件 include定义格式 complexnum1 1 2 2 5 4使用对象小结使用标准类库中的类时 须添加头文件 使用string对象添加 头文件 添加头文件 include并使用标准命名空间usingnamespacestd 2 5 4使用对象小结使用标准类库中的类时 须添加头文件 定义对象方式同变量定义方式 定义对象时可对对象进行初始化 inti stringstr1 定义时初始化 inti 1 或inti 1 stringstr1 hello 或stringstr1 hello 2 5 4使用对象小结使用标准类库中的类时 须添加头文件 定义对象方式同变量定义方式 同类的不同对象由对象名和属性来区分 具有相同的成员函数 stringstr1 hello stringstr2 everyone Cout str1 size endl Cout str2 size endl 2 5 4使用对象小结不同类对象具有不同的成员函数可实现不同操作 Complexnum1 1 2 Stringstr1 hello Cout num1 real endl Cout str1 size endl Cout str1 endl cout num1 endl 2 5 4使用对象小结使用标准类库中的类时 须添加头文件 定义对象方式同变量定义方式 定义对象时可对对象进行初始化 同类的不同对象由对象属性来区分 不同类对象具有不同的成员函数可实现不同操作 类是具有相同特征和操作的对象的抽象 2 6string对象数组与泛型算法第1 2 6节介绍的范型算法同样适合string类 但string对象之间可以直接赋值 所以更为简单 需要注意的是 不要将1 2 6节介绍的find函数与string本身的成员函数混淆 另外 string类还有一个swap成员函数 用来交换两个对象的属性 假设有两个string类的对象str1和str2 下面两种调用方式是等效的 str1 swap str2 str2 swap str1 2 6string对象数组与泛型算法 演示string对象的例子 include include includeusingnamespacestd voidmain stringstr1 wearehere str2 str1 reverse 逆向输出 这里使用str1初始化str2 与str2 str1等效 是为了在保证复制时 str2能有足够的空间存储str1 另外要注意ostream iterator的数据类型是char 不是string 输出结果如下 2 6string对象数组与泛型算法 ereheraew ereheraewwearehere string是系统提供的类 当然就有其特殊性质 其实 string类提供了一对用来指示其元素位置的基本成员函数 指示第一元素的begin 和指示结束的标记end 它们标示要进行迭代的元素空间 如果begin不等于end 算法便会首先作用于begin所指元素 并将begin前进一个位置 然后作用于当前的begin所指元素身上 如此继续进行 直到begin等于end为止 所以它们是元素存在的半开区间 begin end 2 6string对象数组与泛型算法 图2 8是str1和迭代区间示意图 str1 begin 指示第1个元素str end 指示最后一个元素之后的结束位置有了这两个成员函数 就可以用它们表示迭代区间 第二章从结构到类的演变 分析 1 考试所占分值4 2 重点内容 1 面向对象程序设计的基本概念 2 string类的用法 3 如没有使用private关键字定义类的数据成员 则默认为 A A privateB publicC protectedD friend 分析 类与结构体的区别 4 在使用string类的find成员函数来检索主串中是否含有指定的子串时 若在主串中不含指定的子串 find函数的返回值是 分析 String类的成员函数 对象名称 find 要查找的字符串 开始查找的位置 分析 complex对象 2 写出声明一个复数对象的语句 并使该对象被初始化为2 2 1 3i 此声明语句是 历年真题剖析 分析 类的封装性 1 在定义类成员时 为产生封装性 则需使用哪个关键字 A publicB publishC protectedD private 历年真题剖析 5 完成程序题 include includeusingnamespacestd classcomplex public intreal intimag complex intr 0 inti 0 real r imag i complexoperator complex a complex b intr a real b real inti a imag b imag returncomplex r i voidmain complexx 1 2 y 3 4 z z x y cout z real z imag i endl 分析 复数对象的使用 运算符重载
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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