c++多态性---虚函数
虚函数与纯虚函数的区别:
1、拥有虚函数的类可以声明对象,但拥有纯虚函数的类不可以声明对象(只能声明一个指针,并且不能给其分配内存),并且将这个类称为抽象类
特点:
1、虚函数是动态绑定的基础。
2、是非静态的成员函数。 在类的声明中,在函数原型之前写virtual。(不能声明为静态函数)
3、virtual 只用来说明类声明中的原型,不能用在函数实现时。
4、具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
5、本质:不是重载声明而是覆盖。
6、调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数。
虚函数范例:
#include <iostream> using namespace std;class B0 //基类B0声明 {public: //外部接口 virtual void display() //虚成员函数 {cout<<"B0::display()"<<endl;} }; class B1: public B0 //公有派生 { public: void display() { cout<<"B1::display()"<<endl; }}; class D1: public B1 //公有派生 { public: void display() { cout<<"D1::display()"<<endl; }}; void fun(B0 *ptr) //普通函数 { ptr->display(); } int main() //主函数 { B0 b0, *p; //声明基类对象和指针 B1 b1; //声明派生类对象 D1 d1; //声明派生类对象 p=&b0; fun(p); //调用基类B0函数成员 p=&b1; fun(p); //调用派生类B1函数成员 p=&d1; fun(p); //调用派生类D1函数成员 } 结果: B0::display() B1::display() D1::display()