在基类定义为virtual的函数,并在一个或多个派生类中再定义的函数。
1.只要定义一个基类的指针,就可以指向派生类的对象。若无虚函数时,定义为基类的指针,也能作指向派生类的指针使用,并可以用这个指向派生类对象的指针访问继承来的基类成员,但不能用它访问派生类的成员。
2.在派生类中重新定义此函数,要求函数名 函数类型 参数个数和类型全部与基类的虚函数相同,并根据派生类的需要重新定义函数体。
3.使用虚函数实现运行时的多态性的关键在于必须通过基类指针访问这些函数。
4.一旦一个函数定义为虚函数,无论它传下去多少层,一直保持为虚函数。
5.虚函数的再定义称为过载(overriding)而不叫重载(overloading)
6.纯虚函数定义的一般形式:Virtual type func_name(参数列表)=0;
7.含有纯虚函数的基类称为抽象基类,抽象类不能建立对象,但抽象基类可以有指向自己的指针,以支持运行时的多态性。
#include <iostream> #define ECHO(str) std::cout << str #define ECHOLN(str) std::cout << str<< std::endl class Base { public: virtual void who(){ECHOLN("我是基类!");} }; class deriv_1:public Base { public: void who(){ECHOLN("我是子类deriv_1");} }; class deriv_2:public Base{ public: void who(){ECHOLN("我是子类deriv_2");} }; int main(int argc, char** argv) { classBase *b,b0; classderiv_1 d1; classderiv_2 d2;
b= &b0; b->who(); b= &d1; b->who(); b= &d2; b->who(); return0; }
参考资料:https://blog.csdn.net/u011702002/article/details/77434297