一、多态定义
同一种操作作用于不同的对象时,可以产生不同的行为。在面向对象编程中,多态性是指通过继承和重写实现的,同一个方法在不同的子类中可以表现出不同的行为。多态性可以提高代码的灵活性和可扩展性,使得程序更易于维护和升级。
二、多态的本质
vftable表记录虚函数指针,当父类的指针或引用,指向子类对象就发生多态。
所以,多态需要满足两个条件:
1、有继承关系
2、子类重写父类的虚函数
三、代码示例
#include <iostream>
#include <string>
using namespace std;
class Person{
public:
Person(){};
virtual void showInfo()
{
cout<<"我是一个人..."<<endl;
}
};
class Student:public Person{
public:
Student():Person(){}
void showInfo()override//函数的重写,重写父类的虚函数,防止基类函数写错
{
cout<<"我是一个学生..."<<endl;
}
};
void show(Person &p)
{
p.showInfo();
}
void showPoint(Person *p)
{
p->showInfo();
}
int main()
{
Student stu{};//多态必须满足父类调用子类对象这一条件
show(stu);
showPoint(&stu);
Person p{};
show(p);
showPoint(&p);
return 0;
}
运行结果:
我是一个学生...
我是一个学生...
我是一个人...
我是一个人...