什么叫做多态,及同名函数不同的实现形式
多态分成动态多态和静态多态
静态多态:例如函数重载,是允许参数列表不一样的,也不需要继承关系。
动态多态:形成的必要条件:1:首先要有继承关系
2:父类中含有虚函数(及是加virtual修饰,但是构造函数不能加virtual)
3:使用父类指针或者引用,指向或者引用子类对象
满足以上三点才能形成动态多态,及我们平常说的”多态“
这个动态多态是不允许出现参数列表父子不一样的,如果不一样就会报错,子类中的函数是对父类中虚函数的重写(这个和静态多态不一样)
多态实例:
#include <iostream>
using namespace std;
class Person
{ private: string _name; int _age;
public: Person(string name , int age)
{ this->_name = name; this->_age = age; }
//virtual就是虚属性的修饰符。
virtual void showInfo()
{ cout << "姓名" << this->_name <<",年龄:" << this->_age << endl; } string getName() { return this->_name; } int getAge() { return this->_age; }
};
class Stu : public Person
{ private: int _id; public: Stu(string name, int age,int id):Person(name,age),_id(id)
{ }
//override关键字:是用检查重写的函数的返回值与形参列表是否与父类中的函数保持一致。 //如果不一致则直接报错。
//这个重写函数也是一个虚函数。如果出现再次继承,这个函数也可以进行再次重写,到继承类中的重写函数使用final关键字才结束。
void showInfo() override
{ cout <<"学号"<< this->_id << ", 姓名" << this->getName() <<",年龄:" << this->getAge() << endl; } };
int main()
{ Person* p = new Stu("zhangsan",18,1001); p->showInfo(); return 0; }