一、什么是多态
多态性就是不同对象收到相同消息,产生不同的行为。可以用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。
二、多态的种类
静态联编支持的多态性称为编译时多态性(静态多态性)。在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;
}
原文链接: https://www.cnblogs.com/AntonioSu/p/12196623.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/191965
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!