C面向对象基础.ppt_第1页
C面向对象基础.ppt_第2页
C面向对象基础.ppt_第3页
C面向对象基础.ppt_第4页
C面向对象基础.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章C 面向对象基础 C 程序由类定义 类实现和主程序组成 2 1 1类在C 语言中 一个类的定义包含两部分内容 数据成员 成员函数 数据成员定义该类对象的属性 成员函数定义了该类对象的操作即行为或动作 又称为方法 例如 点类 2 1C 的类和对象 类的定义 类由三部分组成 类名 数据成员和成员函数 class类名 private 私有数据成员和成员函数public 公有数据成员和成员函数protected 保护的数据成员和成员函数 classPoint private intx y public voidShowPoint intGetX intGetY 类的实现 voidPoint ShowPoint cout x y endl intPoint GetX returnx intPoint GetY returny 有关类定义的几点说明 1 class是定义类的关键字 类名是一种标识符 必须符合C 标识符的命名规则 内是类的定义体部分 说明该类的成员 类的成员包括数据成员和成员函数 2 类成员的三种访问控制权限 类有三种访问控制权限 分别是private 私有成员 public 公有成员 protected 保护成员 在每一种访问控制权限下 均可以定义数据成员和成员函数 private 只能由本类的成员函数或友元函数访问 public 对外开放 提供了类与外部的接口 protected 只能由本类的成员函数 友元函数或公有派生类成员函数访问 Seealso类的继承 类定义举例 例 定义日期类classTdate 定义日期类 public 定义公有成员函数voidSet intm intd inty 置日期值intIsLeapYear 判是否闰年voidPrint 输出日期值private 定义私有数据成员intmonth intday intyear 类定义体的结束 类中成员函数的定义 类的数据成员说明对象的特征 而成员函数决定对象的操作行为 成员函数是程序算法实现的部分 是对封装的数据进行操作的唯一途径 类的成员函数有两种定义方法 外联定义和内联定义 外联成员函数 外联函数 在类外定义成员函数的具体形式为 返回值类型类名 成员函数名 形式参数表 函数体 voidTdate Set intm intd inty 置日期值 month m day d year y intTdate IsLeapYear 判是否闰年 return year 4 0 外联函数的定义 内联成员函数 内联函数有两种定义方法 一种方法是在类定义体内定义成员函数 隐式声明 另一种方法是使用inline关键字 在类定义体内定义内联函数 隐式声明 classTdate public voidSet intm intd inty 置日期值 month m day d year y private intmonth intday intyear 使用关键字inline定义内联成员函数 显式声明 inlinevoidTdate Set intm intd inty month m day d year y 或voidinlineTdate Set intm intd inty month m day d year y 2 1 2对象 对象 Object 是类 Class 的一个具体实例 Instance 例如 点pa 3 4 是点类的一个具体实例 对象定义语法 类名对象名 例如 定义一个点对象 Pointpa 3 4 对象的定义 方法一 在定义类的同时直接定义classPoint private intx y public voidinit intx0 inty0 intGetx void intGety void dot1 dot2 方法二 在使用时定义对象 类似于变量定义 类名对象1标识符 对象n标识符 如 Pointdot1 dot2 pdot 成员的访问 通过对象调用成员格式 对象名 公有成员其中 称为对象选择符 简称点运算符 例如 dot1 GetX 通过指向对象的指针调用成员格式 指向对象的指针 成员 例如 pdot GetX 或 对象指针名 公有成员 例如 pdot GetX classMyclock private inthour minute second public voidinit voidupdata voiddisplay Myclockclock pclock 定义对象clock和指向 Myclock类对象的指针pclockclock init 通过对象访问公有成员函数pclock 错误 因为不能访问其私有成员 C 程序结构 一般一个较大的项目可以分为三种文件来存放 1 将类的说明作为一个头文件来存放 内联函数和类定义一般归入头文件 2 类的实现部分单独组成一个文件 用来存放类的成员函数的定义 3 在main 中实现类的应用 看例子2 3 2 4 C 程序设计步骤 画类图 类定义classPoint public Point GetX intx inty classTriangle public Triangle intx1 inty1 intx2 inty2 intx3 inty3 voidPrintTriangle doubleaLength doublebLength doublecLength intCheck doubleCalculateArea private PointA B C doublea b c area 类实现voidPoint PrintPoint cout x y endl doubleTriangle CalculateArea doubles s a b c 2 area sqrt s s a s b s c returnarea 主程序voidmain TriangleT1 0 0 3 3 3 0 T1 PrintTriangle if T1 Check cout Area T1 CalculateArea elsecout T1isfailed endl 总结 1 类的定义 2 对象的定义 3 类成员的引用 4 C 程序的结构 5 MicrosoftVisualStudio2005使用方法 要求 会定义类和对象 会画类图和对象图 理解C 程序的结构 理解面向对象设计思想 熟练使用MicrosoftVisualStudio Net2005编程环境 实验一类和对象 1 实验目的 理解C 程序的结构 掌握类和对象的定义和使用 熟悉MicrosoftVisualStudio2005使用方法 实现内容 参照例2 3设计日期类 并显示你感兴趣的日期 要求画出类图 主程序流程图 带缺省参数的成员函数和重载成员函数 1 函数重载两个或两个以上的函数取相同的函数名 但是形参的个数或者形参的类型不应相同 根据调用格式自动选用合适的函数调用 2 带缺省参数的成员函数 例3 4 带缺省参数的成员函数 重载例子详见TestTriangle例子 构造函数 constructor 构造函数是一个与类同名 没有返回值的特殊成员函数 构造函数的声明格式为 类名 类名 形式参数表 例如 ClassPoint Public Point intx inty 一般用于初始化类的数据成员 构造函数类型 默认构造函数带参数构造函数拷贝构造函数类名 类名 对象名 this指针 当一个成员函数被调用时 自动向它传递一个隐含的参数 即this指针 它指向正在访问该类的对象的指针 一个类有很多对象 它的成员是供所有该类的对象共享的 如何区别是那个对象正在访问类成员 this指针就解决了这个问题 数据成员的初始化 构造函数可以采用以下几种不同的形式对数据成员初始化 1 在构造函数的函数体中进行初始化 2 使用构造初始化表对数据成员进行初始化 其格式为 详见P 62如 Circle Circle floatr radius r 3 混合初始化 如 Student Student intn inta char pname number n age a strcpy name pname 4 使用拷贝构造函数进行初始化 析构函数 析构函数的功能是当对象被撤消时 释放该对象占用的内存空间 在对象消亡时 系统将自动调用析构函数 执行一些在对象撤消前必须执行的清理任务 在定义析构函数时 不能指定任何的返回类型 也不能使用void 析构函数没有参数 每个类只能有一个析构函数 析构函数的函数名为类名前加 Point 构造函数是在创建对象时 由系统自动调用 先创建的先调用 构造函数和析构函数的调用顺序刚好相反 先构造的后析构 详见 例3 15 构造函数与析构函数的调用次序 类的聚集 对象成员 对象成员也称为类的聚集 是指在类的定义中数据成员可以为其它的类对象 即类对象作为另一个类的数据成员 如果在类定义中包含有对象成员 则在创建类对象时先调用对象成员的构造函数 再调用类本身的构造函数 析构函数和构造函数的调用顺序正好相反 反映了类之间的特殊关系 即某类由其它类的对象组成 例如 三角形由三个点对象组成 小结 函数重载构造函数this指针数据成员初始化析构函数构造函数与析构函数的调次序聚集 类的继承与派生 建立一个新的类 可以以一个或多个先前定义的类为基础 产生新的类 这个新类称为派生类或子类 而已有的类称为基类或超类或父类 派生类继承了基类的数据成员和成员函数 派生类还可以添加新的数据成员和成员函数 继承实现了代码重用 减少代码冗余 继承性反映了类的层次结构 并支持对事物从一般到特殊的描述 例如 比较下面两个类的异同点 person namesexage person Show teacher namesexagedepartment person show classperson charname 20 charsex 8 intage public person voidshow classtescher puiblicperson chardepartment 20 public person voidshow 派生类的定义 Class派生类名 继承方式基类名 派生类成员声明 例如 classtescher puiblicperson chardepartment 20 public person voidshow 类的继承方式 派生新类的过程 1 吸收基类成员派生类继承基类的成员 实现代码的重用 基类的构造函数和析构函数是不能被继承下来的 2 改造基类成员对基类成员的改造包括两方面 是依靠派生类的继承方式来控制基类成员的访问 是对基类数据成员或成员函数的覆盖 即在派生类中定义一个和基类数据成员或成员函数同名的成员 由于作用域不同 产生成员覆盖 Memberoverridden 又叫同名覆盖 基类中的成员被替换成派生类中的同名成员 覆盖不同于重载 详见P 105 106 3 添加新的成员程序员可以根据实际情况的需要 给派生类添加适当的数据成员和成员函数 来实现必要的新功能 派生关系的特征 1 派生类没有独立性 即派生类不能脱离基类而独立存在 2 派生类对其所继承的基类成员的可访问程度因继承方式的不同而不同 3 无论派生类对其所继承的基类成员能否直接访问 被继承的基类成员都是其成员 派生类的构造函数和析构函数 基类的构造函数和析构函数不能被继承 在派生类中 如果对派生类新增的成员进行初始化 就必须加入新的构造函数 对所有从基类继承来的成员的初始化工作 还是应由基类的构造函数完成 因此必须在派生类中调用基类的构造函数对所需要的参数进行设置 对派生类对象的扫尾 清理工作也需要加入析构函数 1 派生类的构造函数 在下面两种情况下 必须定义派生类的构造函数 派生类本身需要构造函数 在定义派生类对象时 其相应的基类对象需调用带有参数的构造函数 派生类构造函数 参数表 基类构造函数 参数表 对象成员1的构造函数 参数表 对象成员n的构造函数 参数表 派生类新增成员的初始化语句 b intx a x d2 x 说明 1 派生类的构造函数名与派生类名相同 2 参数表需要列出初始化基类数据 新增内嵌对象数据及新增一般数据成员所需要的全部参数 3 冒号之后 列出需要使用参数进行初始化的基类名和内嵌成员名及各自的参数表 各项之间用逗号分隔 在定义派生类对象时构造函数的执行顺序是先祖先 基类 调用顺序按照它们继承时说明的顺序 再客人 对象成员 调用顺序按照它们在类中说明的顺序 后自己 派生类本身 举例 例5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论