C++程序设计(五).ppt

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++程序设计(五).ppt

C++程序设计(五) 常宝宝 北京大学计算机科学与技术系 chbb@pku.edu.cn 内容提要 代码重用 类的继承 多态 抽象类 多重继承 虚拟继承 代码重用 面向对象程序设计追求的目标之一是代码重用(code reuse)。 在C++语言中,类是代码重用的基本单位。 在设计和实现类的时侯,应尽可能使其通用,能为多个任务重用。 类代码重用的方法之一是组合。即在类中定义对象成员,而对象成员是已存在类的对象。 例如已经定义一个描述“引擎”的类,在定义“汽车”类时,可以为汽车类定义一个“引擎”类的对象成员。 对象和其对象成员之间的关系是一种“has-a”关系,如:一辆汽车有一个引擎。 代码重用 在面向对象的程序设计方法中,代码重用的另一种方式是继承。 如果新设计的类和已存在的类具有相似的功能和相似的接口,可以通过继承的方式重用已存在的类。例如: 定义了“形状”类,则“圆”、 “正方形”和“三角形”可以 继承“形状”类的特性。 在继承关系中,被继承的 类称为基类,通过继承关 系新建的类称为派生类。 派生类和基类之间的关系 是“is-a”关系。例如:“圆” 是一种“形状”。 继承 继承意味着派生类继承了基类的所有特性,基类的所有数据成员和成员函数自动成为派生类的数据成员和成员函数。如: “形状”具有位置、大小、颜色等属性,可以移动、绘制等,由其派生出来的“圆”同样有这些属性和操作。 派生类不完全等同于基类,派生类可以添加自己特有的特性,即可以为派生类增加新的数据成员和成员函数。如: “圆”有半径,“正方形”有边长或顶点位置等。 派生类可以重定义基类中不满足派生类要求的特性,既可以重新定义基类中的成员函数。如: 计算“圆”的面积不能直接使用“形状”面积的计算方法。 在继承关系中,基类的接口是派生类接口的子集,派生类支持集类所有的公有成员函数。 继承 派生类的定义方法如下: class 派生类的类名: 继承类型 基类的类名 { … }; 继承类型有三种: public 公有继承 protected 保护继承 private 私有继承 例子:student.h student.cpp student_test.cpp 从类student派生出类graduate_student 继承 派生类继承了基类的所有数据成员和成员函数,包括静态数据成员和静态成员函数。如: graduate_student gs(“罗小四”, “0987654321”, “杨振宁”); gs.set_score(98.5); 派生类可以增加新的数据成员和成员函数,此时要在派生类中定义这些数据成员和成员函数。如: graduate类中新增了数据成员advisor、title 新增了成员函数get_advisor()、set_thesis_title(…)、get_thesis_title() 派生类可以重新定义基类中不能满足要求的成员函数。如: graduate类中重新定义了基类中的成员函数display() 成员函数的重定义 重新定义一个成员函数时,可以调用基类中的旧版成员函数,此时应使用作用域指示符。如: void graduate_student::display() const { student::display(); cout Advisor: advisor endl; cout Thesis: title endl; } 若在派生类中重新定义了某个成员函数,通过派生类对象调用该成员函数,调用的是新版的成员函数,通过基类对象调用的是基类中的旧版成员函数。如: student s(王二, 1234567890); graduate_student gs(“罗小四”, “0987654321”, “杨振宁”); s.display(); gs.display(); 名字隐藏 如果在派生类中重新定义了基类中的成员函数,基类中该成员函数及其所有重载版本在派生类中均不再可用。 基类中成员在派生类中的可见性 派生类中可以存取或调用基类中的保护成员和公有成员,但不能存取或调用基类的私有成员。(保护成员和私有成员的区别) 继承类型 基类中成员在派生类中的存取权限由继承类型确定,继承类型可以改变基类中成员在派生类中的存取权限。 在定义派生类时,如果没有指出继承类型,则默认为私有继承。 参见例子:access.cpp 通过私有继承和保护继承得到的派生类不支持基类的接口,因而派生类和基类之间不存在“is-a”关系。 在C++程序设计中,私有继承和保护继承很少使用。 派生类对象的内存布局 在为派生类对象分配存储空间时,其中包含一个基类的对象。如: 派生类对象的构

文档评论(0)

天马行空 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档