什么是多态?
是指为不同类型的实体提供统一的接口。
多态的作用?
实现接口复用(高度统一接口),提高代码的可扩展性和可维护性。
多态分为静态多态和动态多态:
静态多态:是指相同对象收到不同消息产生不同的消息。
动态多态:是指不同对象收到相同消息,产生不同的消息。
今天我主要讲的就是动态多态:
实现动态多态的条件?
(1)必须要有继承。
(2)在派生类中重写继承基类的虚函数。(函数重写)
(3)通过基类的指针或引用指向派生类对象,通过指针或引用调用虚函数。
动态多态是如何实现的?
c++的动态多态是通过虚函数实现的。
虚函数:是指在基类的成员函数前加virtual关键字,那么此成员函数就是虚函数。
实现多态的基础源代码。
#include <iostream> using namespace std; class A //基类 { public: virtual void func() //虚函数 { cout<<"A::func()-----------\r\n"; } }; class B:public A//派生类B继承基类A { public: virtual void func()//函数重写 { cout<<"B::func()-----------\r\n"; } }; class D:public A//派生类D继承基类A { public: virtual void func()//函数重写 { cout<<"D::func()---------\r\n"; } }; class E:public B//派生类E继承基类A { public: virtual void func()//函数重写 { cout<<"E::func()------------\r\n"; } }; int main() { A a; B b; D d; E e; //通过基类的指针指向派生类对象,然后通过指针调用虚函数 /* A *p=&a; p->func(); //A::func()----------- p=&b; p->func();//B::func()---------- p=&d; p->func();//D::func()----------- p=&e; p->func();//E::func()----------- */ //通过基类的应用指向派生类对象,然后通过引用调用函数。 A &p = a; p.func();//A::func()----------- A &p1 = b; p1.func();//B::func()---------- A &p2 = d; p2.func();//D::func()---------- A &p3 = e; p3.func();//E::func()---------- return 0; }