




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 1 27 第4 5讲 面向对象程序设计基础 2020 1 27 本章任务 能正确理解类与对象的概念能使用方法能正确在方法之间传递信息 2020 1 27 类和对象 类 类是C 程序设计的基本单位相对对象而言 类似于蓝图包含方法和数据 对象 是类的实例使用关键字new创建对象具有行为 对象 类 2020 1 27 类和对象 先有对象还是先有类 类是对象的模板 使用对象前必须先创建类 Net公共类库中包含大量预先定义好的类 在创建windows应用程序项目时 系统总是自动生成一个Form1类 程序的入口Main方法是该类的一个静态方法 在windows应用程序运行时 将在main方法中创建一个Form1类的实例 2020 1 27 NET中的类和对象 在VisualStudioIDE环境中 工具箱中的控件是被图形文字化的可视化类 当把这些对象添加到窗体设计器上时 即由类创建了对象 类本质上是一种数据类型 2020 1 27 定义类 访问修饰符 class类名 访问修饰符 常量声明 访问修饰符 字段声明 访问修饰符 方法声明 访问修饰符 属性声明 访问修饰符 构造函数声明 访问修饰符 析构函数声明 说明 使用类声明可以创建新的类 类声明以一个声明头开始 其组成方式如下 先是指定类的特性或者修饰符 后跟类的名字 它由一组包含在大括号 中的成员声明组成 例如 定义rectangle类 publicclassrectangle 定义类 publicdoublelength 定义字段publicdoublewidth 定义字段 2020 1 27 类的修饰符 public 公有类 表示外界可以不受限制地对该类访问 private 私有类 表示只有本类才能访问 protected 保护类 表示只能对其所在类和从该类派生的子类进行访问 internal 内部类 表示仅能访问本程序 abstract 抽象类 说明该类可以用来做其他类的基类 可以继承但不能单独使用 Scaled 密封类 说明该类不能作为其他类的基类 不能派生新的类 省略类修饰符则表示为private 2020 1 27 1 将类实例化为对象 对象 2 类成员的访问 new 例如 rectanglerec1 newrectangle 对象名 数据 例如 rec1 length 2020 1 27 对类名推荐使用Pascal命名规范 每个单词的首字母要大写 创建并初始化对象 属性 访问修饰符 class new 总结 定义类 2020 1 27 类成员 在类的定义中 包含有各种类成员 概括起来类的成员有两种 存储数据的成员与操作数据的成员 存储数据的成员叫 字段 操作数据成员又有很多种 字段 是类定义中的数据 也叫类的变量 属性 用于读取和写入 字段 值 方法 实质上就是函数 通常用于对字段进行计算和操作 即对类中的数据进行操作 以实现特定的功能 构造函数 是在用类声明对象时 完成对象字段的初始化工作 2020 1 27 字段为类中的成员 是表示与对象或类关联的变量 字段常定义的类型有public 公有型 private 私有型 等 字段 例如 classtriangle 定义类 publicstringname 字段成员publicdoublesideA 字段成员publicdoublesideB 字段成员publicdoublesideC 字段成员 2020 1 27 加上static保留字为静态成员 没有这个保留字的为非静态成员 区别 静态成员属于类所有 非静态成员属于类的对象所有 因此访问静态成员只能由类来访问 而访问非静态成员必须由对象进行访问 静态字段 静态字段的访问格式 类名 静态成员名 非静态字段的访问格式 对象名 非静态成员名 2020 1 27 classTeacher publicstringnumber 1001 非静态字段publicstringname 张宁 非静态字段publicstaticdoublepay 3650 5 静态字段 staticvoidMain string args Teachert1 newTeacher stringstr 职工编号 t1 number 姓名 t1 name 工资 Teacher pay ToString Console WriteLine str 例如 number和name为非静态字段 pay为静态字段 因此访问前面两个字段用对象调用t1 number和t1 name 访问最后一个字段用类来调用Teacher pay 2020 1 27 类的方法表示一类事物所具备的动作 在C 中就是类或对象为完成一项任务而执行的指令序列 在编写程序中使用方法主要是便于修改 增加可读性 方法可以重用和封装 方法 2020 1 27 编写方法 编写方法前的准备工作 该方法主要是实现什么功能 根据功能起一个容易记的方法名 实现该方法需要用户提供什么数据 确定方法的参数 如计算n 就需要给该方法传入一个整数n 该方法是实现操作或是计算 若是操作 方法的返回类型可以定为void若是计算 需要确定需要给调用者返回一个什么类型的结果 如求n 需要给调用者返回一个长整型的阶乘值 方法的最后一个执行语句应当是 若是操作可以省略 return表达式 2020 1 27 编写方法 编写方法前的准备工作 该方法可以给哪些人使用 public 所有人都可以使用private 只能给本类使用protected 可以给本类和派生类使用方法要写在类 class 中 2020 1 27 编写方法 方法定义的格式 方法修饰符 返回值类型方法名 形参列表 方法体 方法修饰符是可选的 它可以是public private protected等之一 默认为private 方法名要符合标识符的命名规则 参数的声明和变量一样 即类型名参数名的格式 用于接收调用者传过来的数值 也相当于方法的局部变量 多个参数之间用逗号分隔 2020 1 27 任务3 根据圆的半径计算圆面积 任务描述 输入圆半径单击 计算 按钮 显示圆面积 2020 1 27 需要定义Circle类自定义方法Area 需要根据参数r计算面积 任务3 根据圆的半径计算圆面积 2020 1 27 代码 定义Circle类publicclassCircle publicconstdoublePI 3 14159 publicdoubler publicdoubleArea doubler this r r this r表示类的字段 r表示方法Area的形参doubles PI this r this r returns 返回面积 传入半径 2020 1 27 代码 修改 计算 按钮 在其Click事件处理程序privatevoidbtnCompute Click objectsender EventArgse Circlecircle1 newCircle doubler double Parse txtR Text 将实参r中的值传递给方法area中的形参rdoubles circle1 Area r stringres 园半径是 circle1 r 厘米 面积是 s ToString 平方厘米 txtResult Text res 2020 1 27 方法参数按值传递 publicdoubleArea doubler doubles circle1 Area r 方法的声明 方法的调用 调用者 area方法 11 5 11 5 2020 1 27 使用以下代码 调用上述方法 结果是什么 publicdoubleArea doubler doubles this r r s PI this r this r returns doublea 0 Circlecircle1 newCircle doubler double Parse txtR Text doubles circle1 Area r a stringres 半径是 circle1 r 厘米 面积是 s ToString 平方厘米 a的值是 a txtResult Text res 方法参数按值传递 2020 1 27 使用以下代码 调用上述方法 结果是什么 publicdoubleArea doubler refdoubles this r r s PI this r this r returns doublea 0 必须初始化Circlecircle1 newCircle doubler double Parse txtR Text doubles circle1 Area r refa stringres 园半径是 circle1 r 厘米 面积是 s ToString 平方厘米 a的值是 a txtResult Text res 通过引用传递参数 如果要传递原值并修改它 使用引用参数就非常方便 在传递时变量必须被初始化 2020 1 27 publicdoublearea doubler outdoubles this r r s PI this r this r returns doublea 不必初始化Circlecircle1 newCircle doubler double Parse txtR Text doubles circle1 area r outa stringres 园半径是 circle1 r 厘米 面积是 s ToString 平方厘米 a的值是 a 通过引用传递参数 在参数前面加一个out关键字 可将该参数设置成一个输出参数 输出参数用来返回一个结果 不必先初始化 2020 1 27 方法的重载 方法重载 就是声明两个以上的同名方法 实现对不同数据类型的相同处理 两点基本要求 1 重载的方法名称必须相同 2 重载的方法 其形参个数或类型必须不同 2020 1 27 例 publicvoidswap refinta refintb publicvoidswap reffloata reffloatb publicvoidswap reffloata 系统会根据参数的类型或个数 寻求最匹配的方法予以调用 方法的重载 2020 1 27 编译器通过识别方法的签名来区分调用哪个方法 方法的签名包括方法名 参数的类型 个数和顺序对以下重载的方法 编译器能够正确识别 对以下方法 编译器无法识别 会报错 方法的重载 publicvoidFoo inta floatb publicvoidFoo floata intb publicvoidFoo inta intb publicvoidFoo intb inta 2020 1 27 方法的重载 2020 1 27 属性 属性 从外部 类的使用者 来看 类似于类的字段 从内部 类的作者 来看 类似于类的方法 classTriangle PrivatedoublesideA publicdoubleSideA 定义SideA属性 get returnsideA set sideA value get访问器 set访问器 2020 1 27 属性是一种用于访问类或对象性质的成员 它与字段不同的是属性不表示存储位置 不直接操作类的数据内容 而是通过访问器进行访问 使用属性可以像使用公共数据成员一样 这样既可以使类中数据被轻松访问 又可以避免随意访问类中公共数据而出现的安全性问题 提高了程序安全可靠性 充分体现了对象的封装性 属性 2020 1 27 如果只提供get访问器 那么这个属性是只读的 如果只提供set访问器 那么这个属性是只写的 建议 将所有字段都定义为private 如果字段需要公开 请使用属性将其公开 属性 2020 1 27 属性的访问方法与类的字段成员的访问方法一样 根据属性声明时是否为静态有下列两种访问形式 非静态属性成员访问 对象名 属性名静态属性成员访问 类名 属性名 属性的使用 2020 1 27 属性的使用 创建对象Triangletri1 newTriangle s1 double Parse txtSideA Text s2 double Parse txtSideB Text s3 double Parse txtSideC Text 使用属性set访问器写入数据tri1 SideA s1 tri1 SideB s2 tri1 SideC s3 使用属性get访问器读取数据txtRes Text 三角形三边长分别为 tri1 SideA 厘米 tri1 SideB 厘米和 tri1 SideC 厘米 2020 1 27 构造函数是特殊的方法 用来实现对象的初始化与类同名没有返回值构造函数用于 当实例化一个对象时 会对类的成员进行初始化 构造函数 2020 1 27 如果我们想使对象初始化时 可以按照设计者的预期来进行 就需要自己书写构造函数的代码 若Triangle类 我们想初始化三边长是0 构造函数可以定义为 classTriangle publicTriangle doublesA 构造函数 sideA sideB sideC sA Triangletri1 newTriangle 0 构造函数的定义 2020 1 27 classTriangle privatedoublesideA privatedoublesideB privatedoublesideC publicTriangle 系统默认构造函数 publicTriangle doublesA 构造函数 sideA sideB sideC sA 构造函数的重载 2020 1 27 当没有构造函数时 NET会提供一个默认空的构造函数 如上例中的Triangle类 会有一个默认构造函数 publicTriangle 系统默认构造函数 编译器只会当类中没有构造函数时 提供一个默认构造函数 但是若提供了其它版本的构造函数 而没有提供默认构造函数 将不能调用默认构造函数 构造函数的重载 2020 1 27 例如上例中没有定义publicTriangle 就不能这样去实例化对象 Triangletri1 newTriangle 构造函数的重载 2020 1 27 析构函数 析构函数也是类的特殊方法 主要用于释放类的实例 析构函数的名字与类名相同 但它的前面需要加一个 符号 与构造函数不同的是析构函数不能带参数 也没有返回值 当撤消对象时 自动调用析构函数 析构函数不能被继承 也不能被重载 析构函数声明格式 类名称 语句块 例如 classRound publicRound 构造函数publicRound intr this r r 构造函数重载 Round 析构函数 Console WriteLine Round isrelease 2020 1 27 面向对象编程的重要特性有 封装 继承和多态 封装性是指将数据与对数据的操作作为一个整体 以类的形式进行定义 这种机制叫做 封装 继承性是指在类之间建立一种关系 即在基类的基础上建立新的类称为派生类 使得新定义的派生类可以继承基类的成员 还可以定义新的成员 建立起类的新层次 多态性是指在类中定义了功能不同但名称相同的方法或属性 通过在类中声明虚拟方法和属性 在派生类中重写这些方法成员的实现 使得调用名称相同的方法成员所执行的操作可能不同 展示出类的多态性 继承与多态 2020 1 27 类的继承 派生类声明格式 Class派生类名 基类名 语句块 1 派生类与基类派生类是从基类中继承成员 并且添加新成员或重新定义成员 一般称被继承的类为基类或父类 继承后产生的新类称为派生类或子类 基类中构造函数和析构函数不能被派生类继承 其它成员都能被继承 即 派生类具有父类所有的公共属性和方法 2020 1 27 派生类 2 基类成员修饰符基类成员修饰符可为public protected private其含义如下 public 访问该成员不受任何限制 可以被基类和派生类访问 也可以被外部代码访问 protected 访问该成员仅限于包含它的类和派生类 外部代码不能访问 private 该成员仅限于包含它的类 不能被派生类和外部代码访问 如果不涉及继承 则private和protected没有区别 2020 1 27 C 中类继承规则 派生类只能继承于一个基类 派生类自然继承基类的成员 但不能继承基类的构造函数 基类中的成员声明时 不管是什么访问控制方式 总能被子类继承 访问控制方式只决定了派生类成员是否能访问基类成员 类的继承可以传递 Object类是所有类的基类 2020 1 27 派生类是对基类的扩展 可以声明新的成员 但不能消除已继承的基类成员 派生类定义中 如果声明了与基类同名的成员 则基类中同名的成员将被覆盖 C 中类继承规则 2020 1 27 publicclassPerson privatestringname 人物都有姓名privatecharsex 人物都有性别privateintage 人物都有年龄publicPerson publicPerson stringname charsex intage this Name name this Sex sex this Age age 以下都是封装字段 为了数据的安全 publicstringName get returnname set this name value 2020 1 27 publiccharSex get returnsex set this sex value publicintAge get returnage set this age value 定义方法 比如吃饭publicvoidEat Console WriteLine Name 正在吃饭 2020 1 27 派生类 子类 publicclassZhangSan Person publicZhangSan 这时 张三这个类就有了父类的公共属性和方法publicZhangSan stringname charsex intage this Nam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第21课 小圣施威降大圣 课时练01(含答案)
- 美术老师转岗培训
- 如何放松自己
- 边境管控工作课件
- 工商银行2025泸州市秋招笔试创新题型专练及答案
- 中国银行2025淮北市小语种岗笔试题及答案
- 2025年3D打印技术的生物打印材料研究
- 建设银行2025乌海市秋招笔试专业知识题专练及答案
- 2025年3D打印的工业应用
- 交通银行2025阳江市结构化面试15问及话术
- 2025-2026学年人教版(2024)小学美术二年级上册(全册)教学设计(附目录P144)
- 智慧校园建设“十五五”发展规划
- 流管专员笔试题目及答案
- DBJ15 31-2016建筑地基基础设计规范(广东省标准)
- 第2课《树立科学的世界观》第2框《用科学世界观指导人生发展》-【中职专用】《哲学与人生》同步课堂课件
- 《照明线路安装与检修》一体化课件-第一章 职业感知与安全用电
- 专升本《建筑力学》-试卷-答案
- 2020年春统编版四年级语文下册第16课《海上日出》教学设计
- 自学考试国际商务谈判笔记精华
- 印制电路板(PCB)的设计与制作课件
- 文化差异与跨文化交际课件(完整版)
评论
0/150
提交评论