简朴地说,那些被virtual关键字润饰的成员函数,就是虚函数。
起首:强调一个观点定义一个函数为虚函数,不代表函数为不被完成的函数。定义它为虚函数是为了许可用基类的指针来挪用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被完成。定义纯虚函数是为了完成一个接口,起到一个范例的作用,范例继续这个类的程序员必需完成这个函数。
例:
class A { public: virtual void foo() { cout<<"A::foo() is called"<<endl; } }; class B:public A { public: void foo() { cout<<"B::foo() is called"<<endl; } }; int main(void) { A *a = new B(); a->foo(); // 在这里,a虽然是指向A的指针,然则被挪用的函数(foo)倒是B的! return 0; }
这个例子是虚函数的一个典范运用,经由过程这个例子,或许你就对虚函数有了一些观点。它虚就虚在所谓“推延联编”或许“动态联编”上,一个类函数的挪用并非在编译时刻被肯定的,而是在运行时刻被肯定的。因为编写代码的时刻并不能肯定被挪用的是基类的函数照样哪一个派生类的函数,所以被成为“虚”函数。 虚函数只能借助于指针或许引用来到达多态的结果。
以上就是什么是虚函数的细致内容,更多请关注ki4网别的相干文章!