我对多态的认识:
用一句话概括就是,在基类的成员函数前加上virtual关键字,在派生类中重写相同的成员函数,运行时会根据实际类型调用相应的函数。如果对象类型是派生类,就调用派生类的函数,如果是基类就会调用基类的函数。
多态的总结:
1.用virtual声明的函数就叫虚函数,虚函数肯定是成员函数。
2.存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚指针适合对象对应的。
3.多态性是一个接口多种实现,是面向对象的核心,分为类的多态性和函数多态性。
4.多态用虚函数来实现,结合动态绑定。
5.纯虚函数:虚函数=0;
6.抽象类是指包含至少一个纯虚函数的类。
纯虚函数 virtual void fun()=0;
实现运行时的多态的条件:
1.基类和派生类为公有继承
2.基类函数使用virtual声明
3.通过基类指针或者引用调用虚函数。
派生类的虚函数重写或者覆盖了基类的同名函数。
非类的成员函数,类的静态成员函数,类的够着函数不能为虚函数,析构函数可以为虚函数。将基类的析构函数定义为虚函数后,通过基类的指针删除指向派生类的动态对象时,系统会调用相应的类的析构函数,如果不将基类的析构函数定义为虚函数,则只会调用基类的析构函数。
抽象类:
含有纯虚函数的类叫做抽象类。
抽象类不能实例化,但是可以声明抽象类的指针或者引用。通过抽象类的指针或者引用指向不同的子类对象。