c语言是面向对象程序设计,C语言面向对象程序设计.ppt

C语言面向对象程序设计.ppt

面向对象程序设计 C 程序设计语言主讲 陈泽琳 学时安排 上课学时 24上机学时 16 参考资料 美 H M Deitel等著 薛万鹏等译 C 程序设计教程 郑莉等编著 C 语言程序设计 钱能主编 C 程序设计教程 刘路放编著 VisualC 与面向对象程序设计教程 杜建成等编著 C 简明教程 课程学习的目标 学习C 程序设计语言 掌握面向对象程序设计方法 课程学习的要求 预习 通过例子了解概念 编程上机实践 课程大纲 1 类 Class 2 构造函数和析构函数 Constructor Destructor 3 静态成员和友元 StaticMember Friends 4 继承与多态性 Inheritance Polymorphism 5 运算符重载 OperatorOverloading 6 I O流与文件 I OStream File 7 模板 Template 异常处理8 MFC类库及程序框架9 面向对象程序设计 Object orientedprogramming C程序复习 函数 参数 指针 引用 执行过程与程序 讲课内容的一点说明 书的内容写的很细 讲课时先讲主要内容 通过例子理解 在此过程中主要学习编程序 最后再补充C 的细节规则 课件中的约定 基础内容重点内容 难点内容 需要注意的内容 应多练习的内容 1 类 class 1 1类的概念 面向对象程序设计 问题 例1 1 编写一个时钟的程序 程序可以设置时 分 秒 可以判断设置的时间是否合理 时 0 23 分 0 59 秒 0 59 显示时间 什么是类 类是一种用户定义的数据类型 C语言程序 结构化程序设计方法 includestructTime inthour intminute intsecond structTimestandard time main set time 18 20 30 show time voidset time inth intm ints standard time hour h 0 C 语言程序 面向对象程序设计 includeclassTime private inthour intminute intsecond public voidset time int int int voidshow time voidTime set time inth intm ints hour h 0 Timestandard time main standard time set time 18 20 30 standard time show time 看上去只是写法不同 实际上在面向对象程序设计中 class set time show time 是一个整体 是可以独立于main 主函数 也可以看成是对象的描述 注意这里的对象与后面要讲的对象一词意思不同 以后会详细介绍 即面向对象 而结构化程序设计中 只能将问题划分为一个个函数模块 哪些函数模块可以描述一个子问题或一个对象 程序中无法表示 因此以上两个程序是有本质区别的 面向对象程序设计可以将描述完整的子问题提供给他人 同时还能保护自己的程序不被他人乱改 多个面向对象子程序还可以象搭积木一样组合成大的面向对象程序 程序设计可以象生产汽车标准零件一样形成大规模生产 而这些在结构化程序设计中都很难做到 为什么用类 可以实现面向对象的程序设计即代码可以重用并受到保护 类是实现面向对象程序设计的基本工具下面我们一步步地介绍关于类的定义 用类进行面向对象程序设计的方法 class类名 数据成员 datamembers 成员函数 memberfunctions 类的定义 class类名 public 公有段成员 protected 保护段成员 private 私有段成员 面向对象程序设计 说明 1 类名的第一个字母一般大写 2 无论是数据成员 还是成员函数 都可用三个访问控制关键字说明 public protected private 3 默认情况是private 4 说明为private的数据成员 其他对象不可访问的 5 类是一种类型的定义 不分配存储空间 再看一个例子 例1 2 描述人的信息 姓名 出生日 籍贯等其成员函数有 设置姓名 出生日 籍贯等 显示姓名 出生日 籍贯等如要增加人的其他信息 学历 党派等 可以在类中增加这些数据成员 还可以增加处理这些数据成员的成员函数 classHuman public Human display private charname 10 struct intyear intmonth intdate birthday charhistory 20 有成员函数和无成员函数 成员的隐蔽和成员的公开 类与结构的区别 如何定义类成员 数据成员 成员函数的声明声明 或说明 定义 说明 1 所有类定义中声明的成员函数都要定义其成员函数的实现 2 在类中定义成员函数 默认为内联函数 小函数 执行效率高 3 在类之外定义成员函数 函数名必须为类名 成员函数名 4 非成员函数的全称为 函数名 不会引起出错时可省略 1 2类成员的定义 称为作用域运算符 例1 3 在类的内部定义成员函数 includeclassTime public voidset time inth intm ints hour h 0 在类的外部定义成员函数 includeclassTime public voidset time int int int voidshow time protected inthour intminute intsecond voidTime set time inth intm ints hour h 0 类成员的保护 即对象成员的访问限制 类成员为public 则任何函数可以访问 提供给外部的接口 为protected 则自己类的成员函数和派生类的成员函数可以访问 为private 则只能被自己类的成员函数访问 注 访问包括赋值和引用 a birthday year 1998 cout a name 成员访问说明符 public protected private 除了全局变量赋初值 C及C 的变量访问都是在函数中完成的 类的数据成员的访问也是在成员函数或一般函数中完成的 一般函数只能访问public数据 函数中访问数据 类的数据成员 函数调用函数 例1 4 classTest public voidputpuba int intpuba protected voidputproa int intproa private voidputpria int intpria voidTest putpuba inta puba a proa a pria a cout puba endl cout pubais puba cout proais proa cout priais pria endl 类成员函数可以访问自己的保护成员和私有成员putproa a 1 putpria a 2 cout endofputpuba endl voidTest putproa inta puba a proa a pria a cout proa endl cout pubais puba cout proais proa cout priais pria endl 访问自己的私有成员putpria a 3 cout endofputproa endl voidTest putpria inta puba a proa a pria a cout pria endl cout pubais puba cout proais proa cout priais pria endl 访问自己的保护成员putproa 中的putpria 与下一函数调用 只能执行一个 否则循环调用 putproa a 1 cout endofputpria endl voidmain inta 1 b 2 c 3 Testobj obj puba 10 cout inmain puba obj puba endl obj proa 20 error proaisprotectedmember obj pria 30 error priaisprivatememberobj putpuba a obj putproa b error putproa isprotectedmember obj putpria c error putpria isprivatemembercout end endl 类定义的public段是类的对外接口 可以被外部访问 而protected可以被派生类访问 若类需修改 只需修改类的内部程序和保护或私有数据 而类的对外接口不变 即公共成员函数的功能 名字 参数不变 则不需改外部应用程序 类成员保护的好处 由此可以建立搭建应用程序的基础块 这些块是通用的和安全的 例子见书p250 251 问题 类中定义的public数据成员与全局变量的区别 不同之处 若类的对象是全局的 则访问都是整个程序但类的public数据成员要通过对象访问 类中成员 每定义一个对象则生成一个该成员的变量全局变量只有一个 作用域 类中成员 由对象变量的作用域决定全局变量 整个程序 什么是对象 对象是类类型的变量 类成员 protected public private 定义对象时 为每个数据成员分配空间 为每个成员函数建立入口地址 即函数指针 函数参数和函数返回值 this 1 3对象 通过对象访问类的成员 人 车 动物等是一些抽象的概念 每个抽象的概念有它的特征 这就好像是类 对象是抽象类的实例 即当变量存放一个值时 这个值就是一个特定的人或车或动物等 不再是抽象的概念了 例1 5 本文件名为class1 h 关于多文件编译 见上机指导 classHuman public voidassignhuman char char char 赋予对象属性voiddisplay 显示某个人的信息intupdatecorp char corperation 修改某个人的工作单位protected charname 40 存放姓名的数组struct intyear intmonth intdate birthday 存放生日的结构型变量charcorperation 100 存放工作单位的数组 本文件名为class1 cpp include include include atoi include class1 h voidHuman assignhuman char np char bp char cp chartemp 5 strcpy name np strncpy temp bp 4 temp 4 0 birthday year atoi temp strncpy temp bp 5 2 temp 2 0 birthday month atoi temp strncpy temp bp 8 2 temp 2 0 birthday date atoi temp strcpy corperation cp voidHuman display cout Apersoninfo endl cout name birthday year birthday month birthday date corperation endl intHuman updatecorp char cp strcpy corperation cp return0 本文件名为main cpp include include include include class1 h voidmain Humanzhang Humanclassmates 10 inti charname 20 birthday 11 corp 50 zhang assignhuman zhangming 1972 10 12 SCUT zhang display 接下一页 name birthday corperation zhang name birthday corperation name birthday corperation name birthday corperation classmanes 0 classmanes 1 classmanes 9 i name 0 19 birthday 0 10 corp 0 49 对象存储空间分配示意图 for i 0 i name birthday corp cout name birthday corp endl if strchr birthday 检查输入的生日中是否包含 cout error endl elseclassmates i assignhuman name birthday corp for i 0 i 2 i classmates i display classmates 1 updatecorp HP classmates 1 display 接上一页 说明 对象zhang 调用成员函数赋值并显示 对象数组classmates 10 调用成员函数赋值并显示 调用成员函数 对象名 成员函数名 引用对象名 成员函数名 对象指针 成员函数名 不同类的成员函数可同名 实际为不同的函数普通函数的调用与在C语言中的调用相同见例子1 6中的readpeople 可替换为display 例1 6 用引用调用成员函数 include include include include class1 h voidreadhuman Human voidreadpeople Human 用引用调用成员函数 readpeople Human 可改名为display Human 例1 7 用对象指针调用成员函数 include include include include class1 h voidreadpeople Human 普通函数声明 参数为指向Human类的指针voidmain Humanzhang Humanclassmates 10 inti zhang assignhuman zhangming 1972 10 12 SCUT zhang display for i 0 i 2 i readpeople voidreadpeople Human pp pp是指向classmates i 对象的指针 charname 20 birthday 11 corp 50 cout name birthday corp coutassignhuman name birthday corp 用指针调用成员函数 类的作用域 类成员的作用域位于类中 即类的任何成员可以访问该类的其他成员 对象的作用域和存在性 对象作用域和存在性同变量 即 作用域存在性全局对象整个程序可访问从程序开始到结束全局静态对象所在文件可访问从程序开始到结束局部对象所在函数可访问从函数调用到结束局部静态对象所在函数可访问从程序开始到结束 问题1 问题2 如何测得Human类的对象所占的存储空间大小 默认函数参数值是否可以在定义中指定voidfunc intx 0 inty 0 sizeof Human 或sizeof zhang 即各数据成员大小之和 问题3 定义在前调用在后则可以 定义在后时则要放在原形说明中 如何定义Human型对象的链表 classHuman charname 20 struct birthday Human next 实例1 构造一个时钟类 成员数据 时 分 秒为私有其成员函数有 置时钟 显示时钟 用时种类编程序 面向对象程序设计实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值