- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
派生类与继承 主要内容 1、什么是继承? 举个简单的例子:“狗”和“柯利狗”。当谈论“狗”的时候,知道它是哺乳动物,有4条腿,1条尾巴,喜欢啃肉骨头,……现在谈论“黑狗”,人们会怎么说呢? 一种是说“柯利狗是一种哺乳动物,有4条腿,1条尾巴,喜欢吃肉骨头,……,并且尖鼻子、红白相间毛色、适合放牧”。 另一种是说:“柯利狗就是适合放牧、尖鼻子、红白相间毛色的狗”。 什么是继承? 比较一下柯利狗的两种说法,显然后一种说法更好。那么它好在哪里呢? 第一,它更简练; 第二,更重要的是它反映了“狗”和“柯利狗”这两个概念的内在联系。“狗”和“柯利狗”之间存在一条重要的联系,那就是所有的“柯利狗”都是“狗”,或者说,“柯利狗”是一类特殊的“狗”。根据这一条,“狗”所具有的特征,例如4条腿,1条尾巴等,“柯利狗”自然都具有。也就是说,“柯利狗”从“狗”那里继承了“狗”的全部特征。 继承的层次结构 面向对象中的继承和派生 继承和派生:一个新类可以从现有的类继承特征(属性和方法);从现有的类产生新类的过程称为派生。 现有的用来派生新类的类称为基类或父类,派生出来的类称为派生类或子类。 派生类可以作为基类继续派生新的类,从而形成类的层次结构。 2、派生类的定义 class 派生类名 : 继承方式 基类名 { private: 成员声明列表 protected: 成员声明列表 public: 成员声明列表 }; 派生类的定义 继承方式 public:公有继承 private:私有继承 protected:保护继承 通常在派生类类体中列出新增的数据成员和成员函数(个性),基类的成员将自动成为派生类的成员(共性),不用重复编写。 3、派生类示例:基类 class CPoint { int x,y; public: CPoint(){ x=0; y=0; } CPoint(int a,int b) { x=a; y=b; } void SetVal(int a, int b){x=a; y=b;} int GetX() {return x; } int GetY() { return y; } }; 派生类示例:派生类 class Circle : public CPoint { int radius; public: Circle() { radius=0; } Circle(int a,int b,int r):CPoint(a,b) { radius=r; } void SetR(int r) {radius=r; } int GetR() {return radius; } }; 派生类示例:main void main() { Circle c(3,4,5); coutc.GetX()endl; coutc.GetY()endl; coutc.GetR()endl; } 派生类示例说明 派生类构造函数必须提供初始化从基类继承来的数据成员的机制 Circle::Circle(int a,int b,int r):CPoint(a,b) { radius=r; } 公有派生类对象,可以访问基类的公有成员,就像访问本类的公有成员函数一样。对于私有成员,需要借助公有成员函数间接访问。 4、派生类对基类的扩充 派生类继承了基类除构造函数、析构函数以外所有的数据成员和成员函数,实现了代码重用。 派生类必然具有某些和基类不同的属性和行为,需要对基类进行扩充和改造。 扩充:在派生类中增加成员函数和数据成员。 改造:当继承而来的成员不能满足需要时,可以进行覆盖。覆盖是在派生类中定义与基类同名的函数,覆盖也可针对数据成员。 区分重载:在同一个类中定义同名函数但参数不同。 派生类对象 class Circle : public CPoint { int radius; public: …… }; Circle c(3,4,5); 主要内容 1、继承方式 继承方式决定了基类成员在派生类中的访问属性。 派生类中新增成员函数→基类成员? 派生类对象→基类成员? 三种访问方式 公有继承:public 保护继承:protected 私有继承:private 2、公有继承:public 基类的公有成员在派生类中仍然是公有成员;派生类中可以访问;通过派生类对象可以访问。 基类的保护成员在派生类中仍然是保护成员;派生类中可以访问;通过派生类对象不可以访问。 基类的私有的成员在派生类中不可访问,即在派生类成员函数中,不能访问从基类继承过来的私有成员,虽然它们存在于内存中;通过派生类对象更不能访问。 公有继承:public示例 class CPoint { int x; //
文档评论(0)