一、什么是多态
多态性就是不同对象收到相同消息,产生不同的行为。可以用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。
二、多态的种类
静态联编支持的多态性称为编译时多态性(静态多态性)。在C++中,编译时多态性是通过函数重载和模板实现的。利用函数重载机制,在调用同名函数时,编译系统会根据实参的具体情况确定索要调用的是哪个函数。
动态联编所支持的多态性称为运行时多态(动态多态)。在C++中,运行时多态性是通过虚函数来实现的。
编译时和运行时具体过程可参考:https://www.cnblogs.com/AntonioSu/p/12196525.html
三、什么是虚函数
主要是为了实现动态多态而设计。用virtual关键字申明的函数叫做虚函数。
虚函数的重写:派生类中有一个跟基类的完全相同的虚函数,我们就称子类的虚函数重写了基类的虚函数。“完全相同”是指:函数名、参数、返回值都相同。
四、代码示例
动态多态的实现
#include <iostream> using namespace std; class Person { public: virtual void show() { cout << "I am person" << endl; } }; class Student : public Person { public: virtual void show() { cout << "I am student" << endl; } }; class Teacher : public Person { public: virtual void show() { cout << "I am teacher" << endl; } }; class Bachelor : public Student { virtual void show() { cout << "I am bachelor" << endl; } }; int main(){ Person person; Student student; Teacher teacher; Bachelor bachelor; Person *one = &person;//指向person one->show(); // I am person 。多态,person.show()被调用 one = &student; //基类指针one指向派生类对象student one->show(); //I am student 。多态,student.show()被调用 one = &teacher; //基类指针one指向派生类对象teacher one->show(); //I am teacher 。多态,teacher.show()被调用 one = &bachelor; //基类指针one指向派生类对象bachelor one->show(); //I am bachelor 。多态,bachelor.show()被调用 return 0; }