第03章 C++的面向对象.ppt

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

3.2继承和派生类 3.2.3多继承 在类的继承中,允许一个派生类继承多个基类,这种多继承的方式可使派生类具有多个基类的特性,大大提高了程序代码的可重用性。 多继承下派生类的定义是按下面的格式: class 派生类名 : [继承方式1] 基类名1,[继承方式2] 基类名2,... { [派生类的成员] }; 其中的继承方式还是前面的三种:public、private和protected。 例如: class A {...} class B {...} class C:public A,private B {...} 派生类C的成员包含了基类A中成员和B中成员以及该类本身的成员。 允许一个基类有多个派生类以及从一个基类的派生类中再进行多个层次的派生。 3.3多态和虚函数 3.3.1虚函数 [例Ex_VirtualFunc] 虚函数的使用。例3_33 #include iostream.h class CShape { public: virtual float area() // 将area定义成虚函数 { return 0.0; } }; class CTriangle:public CShape { public: CTriangle(float h, float w) { H=h; W=w; } float area() { return (float)(H * W * 0.5); } private: float H, W; }; 3.3多态和虚函数 class CCircle:public CShape { public: CCircle(float r) { R=r; } float area() { return (float)(3* R * R); } private: float R; }; void main() { CShape *s[2]; s[0] = new CTriangle(3,4); couts[0]-area()endl; s[1] = new CCircle(5); couts[1]-area()endl; } 运行结果为: 6 78.5398 3.3多态和虚函数 说明: (1)?虚函数在重新定义时参数的个数和类型必须和基类中的虚函数完全匹配。 (2)?虚函数所具备的上述功能,只有通过基类指针才可得到。虚函数在用对象名和成员运算符以正常方式调用时,不能达到其功能。例如: CShape ss; ss.area(); 将得到0.0。 (3)?如果不使用new来创建相应的派生类对象,也可使用下列方法来实现: void main() { CShape *p1, *p2; CTriangle tri(3, 4); CCircle cir(5); p1 = tri; p2 = cir; coutp1-area()endl; coutp2-area()endl; } (4)???虚函数必须是类的一个成员函数,不能是友元函数,也不能是静态的成员函数。 (5)可把析构函数定义为虚函数,但不能将构造函数定义为虚函数。通常在释放基类中和其派生类中的动态申请的存储空间时,也要把析构函数定义为虚函数,以便实现撤消对象时的多态性。 3.3多态和虚函数 3.3.2纯虚函数和抽象类 定义一个基类时,有时会遇到情况:无法定义基类中虚函数的具体实现,其实现完全依赖于其不同的派生类。例如,一个“形状类”由于没有确定的具体形状,因此其计算面积的函数也就无法实现。这时可将基类中的虚函数声明为纯虚函数。 声明纯虚函数的一般格式为: virtual 函数类型函数名(形数表) = 0; 与一般虚函数不同的是:在纯虚函数的形参表后面多了个“= 0”。把函数名赋于0,本质上是将指向函数的指针的初值赋为0。虚函数不能有具体的实现代码。 抽象类是指至少包含一个纯虚函数的特殊的类。它本身不能被实例化,也就是说不能声明一个抽象类的对象。必须通过继承得到派生类后,在派生类中定义了纯虚函数的具有实现代码,才能获得一个派生类的对象。 [例Ex_VirtualFunc] 虚函数的使用。 #include iostream.h class CShape { public: virtual float area() = 0; // 将area定义成纯虚函数 }; 3.3多态和虚函数 class CTriangle:public CShape { public: CTriangle(float h, float w) { H = h; W

文档评论(0)

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

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

1亿VIP精品文档

相关文档