c++的虚函数:通过基类访问派生类的函数实现多态
全局函数,类的静态成员函数,内联函数不能定义为虚函数。
#include<iostream>
//#include<vector>
using namespace std;
class A
{
public:
A() { cout << "createA" << endl; }
virtual void fun() {cout<<"A()" << endl;}
static int fun1(A a)
{
return a.a;
}
virtual ~A(){ cout << "~A()" << endl;}
private:
int a;
};
class B:public A
{
public:
B() { cout << "createB" << endl; }
//virtual void fun() { cout << "B()" << endl; }
~B() { cout << "~B()" << endl; }
};
int main()
{
A* a = new B();
a->fun();
delete a;
return 0;
}
1,实现多态,首先基类中必须有虚函数,virtual关键字,倘如派生类中无与基类虚函数同名函数,则A* a = new B();基类指针指向的是自己的虚函数,这是因为在继承中派生类复制了基类的数据和内存,包括基类的虚函数地址,当派生类中也有同名虚函数时,该地址会更新为派生类虚地址,否则为基类虚地址。
2,虚析构,为了解决内存泄漏的问题,A* a = new B();倘如没有虚析构函数,则只会析构基类指针对象,而派生类对象无法回收。
若没有虚析构,则是没有析构派生类对象。