第九章继承与多态.PPT

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

第九章 继承与多态 主要内容:  理解基类和派生类的概念 掌握继承的概念和用法 理解虚函数、纯虚函数和抽象基类的概念和用法  理解多态的概念和作用,掌握多态的实现方法  理解虚析构函数的概念和作用,掌握虚析构函数的用法 派生类对象的地址也可以赋给指向基类对象的指针,例如:   threeD three(20.0, 20.0, 30.0);   twoD *pTwo; 下面的赋值是合法的:   pTwo = three;   由于指针pTwo是指向twoD对象,在这个赋值过程中,派生类类型被隐式转换成twoD。所以,pTwo只能调用twoD的成员函数,需要注意的是:我们不能把一个指向派生类对象的指针指向基类的对象。 引用与指针类似。例如,如果一个函数A定义有twoD引用参数,用函数B调该函数A时,实参可以是从twoD派生的类的对象。在函数A内,可以访问twoD类的成员。 通过指针调用成员函数时,到底是调用基类的成员函数,还是调用派生类的成员函数,是由指针的类型决定的,而不是由对象决定的。 比如,上面的对象three,编译器只把指针pTwo当成一个twoD类型指针处理,也就是说,不知道它现在指向的是一个threeD类型的对象。 当调用getSum()成员函数时:   pTwo-getSum(); 编译器会调用基类版本 : “twoD::getSum()”, 而不是调用: “threeD::getSum()”。 如果想解决这个问题,需要利用下一节虚函数的知识。 * 9.1 基类和派生类 面向对象程序设计的其它重要特征还包括:继承和多态。 ??? 继承能够从一个类派生出另一个类,前者称之为基类或父类,后者称之为派生类或子类。派生类能够继承基类的功能,也能改变或增加它的功能。 代码复用是C++最重要的性能之一,它是通过类继承机制来实现的。通过类继承,我们可以复用基类的代码,并可以在继承类中增加新代码或者覆盖基类的成员函数,为基类成员函数赋予新的意义,实现最大限度的代码复用。 多态是指在基类中定义的属性或行为,在派生类中可以具有不同的类型或表现出不同的行为. (1) 它允许指向基类对象的指针指向派生类的对象。 (2) 基类和派生类中可有名字和参数完全相同的函数,但他们的功能并不相同。 (3) 当程序运行时,如果用基类指针调用成员函数,能够根据该指针所指向的对象的类型自行确定是调用基类的成员函数还是调用派生类的成员函数。如果没有多态的功能,我们就不得不用条件语句,确定是调用哪一个类的成员函数。 9.1.1 继承的定义及工作方式 我们可以用一个简单的例子解释什么叫继承。假定我们要处理2维空间中的点,定义了一个称之为twoD的2维空间点类: 程序段 9-1 class twoD { protected:  double x, y; // x和y坐标 public:  twoD(double i, double j):x(i), y(j){ } //内联构造函数  void setX(double NewX) { x = NewX;} //内联成员函数  void setY(double NewY) { y = NewY;} //内联成员函数  double getX() const { return x; }  double getY() const { return y; } }; 假定后来又要处理3维空间点的情形,一个直接的方法是再定义一个3维空间点类threeD: 程序段 9-2 class threeD { protected:  double x, y, z; // x 、y和z坐标 public:  threeD(double i, double j, double k):x(i), y(j) , z(k){ }  void setX(double NewX) { x = NewX; }  void setY(double NewY) { y = NewY; }  void setZ(double NewZ) { z = NewZ; }  double getX() const { return x;

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档