ch13 多态 C++教学课件.pptVIP

  • 5
  • 0
  • 约9.4千字
  • 约 39页
  • 2018-01-25 发布于浙江
  • 举报
ch13多态C教学课件

C++实用教程 第13章 多态 目录 13.1 多态和虚函数 13.2 运算符重载 13.3 典型运算符重载 13.4 综合应用实例 13.1.1 多态概述 多态(Polymorphism),是指不同类型的对象接收相同的消息时产生不同的行为。 消息主要是指对类的成员函数的调用 不同的行为是指成员函数的不同实现 在C++中,多态可分为两种:编译时的多态和运行时的多态。 编译时的多态通过函数的重载或运算符的重载实现 运行时的多态通过继承和虚函数实现 编译方式:静态(早期)联编和动态(晚期)联编(binding,又称绑定)。 [例Ex_PolyFunc] 多态函数的静态联编示例 #include iostream using namespace std; class CShape { public: float area() { return 0.0;} }; class CTriangle : public CShape { public: CTriangle(float h = 0, float w = 0) { H = h; W = w;} float area() {return (float)(H * W * 0.5); } private: float H, W; }; class CCircle : public CShape { public: CCircle(float r = 0) {R = r;} float area() {return (float)(3* R * R);} private: float R; }; int main() { CTriangle tri( 3, 4 ); couttri.area() = tri.area()endl; CCircle cir(5); coutcir.area() = cir.area()endl; CShape *s1 = tri; couts1-area()=s1-area()endl; CShape s2 = cir; couts2.area() = s2.area()endl; return 0; } 静态多态性 (静态绑定、先期捆绑) 通过函数重载实现。 函数重载的两种方式: 在同一类中重载:同名的成员函数,根据参数等不同,自动予以区别。 基类成员在派生类中的重载。 13.1.2 虚函数机制 虚函数是用关键字virtual来修饰的基类中的public和protected成员函数。 在派生类中定义后,就在此类层次中具有了该成员函数的不同版本。 在程序执行过程中,依据基类对象指针所指向的派生类对象,或通过基类引用对象所引用的派生类对象,就能确定哪一个版本被激活了,从而实现动态联编。 说明 虚函数只能是类的成员函数,不能是友元函数,也不能是静态成员函数。 静态成员函数没有this指针,不受限于某个对象。 可把析构函数定义为虚函数,但不能将构造函数定义为虚函数。 虚函数在派生类重新定义时参数个数、类型及函数类型必须和基类中的虚函数完全匹配。 虚函数派生下去仍是虚函数,且可省略virtual关键字。 class Base { public: void fn() { cout In Base\n; } }; class Sub : public Base { public: void fn() { cout In Sub\n; } }; void test ( Base b) { b.fn(); } int main(){ Base bc; Sub sc; test(bc); test(sc); } [例Ex_VirtualFunc] 虚函数的动态联编示例 #include iostream using namespace std; class CShape { public: virtual float area() { return 0.0;} }; class CTriangle : public CShape { public: CTriangle(float h = 0, float w = 0) { H = h; W = w;} float area() {return (float)(H * W * 0

文档评论(0)

1亿VIP精品文档

相关文档