C++中静态绑定和动态绑定

//总结:只有虚函数使用动态绑定  其他函数都是静态绑定
#include 
using namespace std;

class B
{
public:
    void vfun()
    {
	cout << "B普通函数" << endl;
    }
    virtual void show()
    {
	cout << "B show" << endl;
    }
};

class D : public B
{
public:
    void vfun()
    {
	cout << "D 普通函数" << endl;
    }
    void show()
    {
	cout << "D show" << endl;
    }
};

int main()
{
    D *pd = new D;
    B *pb = pd;
    pd->vfun();	    //虽然指针pd pb 指向的是同一个函数 但调用的不是同一个函数  因为函数vfun()不是一个虚函数 它是静态绑定的  编译器会在编译期根据对象的静态类型来选择函数    pd的静态类型是D*  pb的静态类型是B*
    pb->vfun();

    pd->show();	    //调用的是同一个函数 因为show()函数时虚函数 是动态绑定的 
    pb->show();

    return 0;
}

动静态绑定需要理解的4个名词:
(1)对象的静态类型 :对象在声明时采用的类型,是在编译期确定的。
(2)对象的动态类型:目前所指对象的类型,是在运行期决定的,对象的动态类型可以更改,但对象的静态类型无法更改。
(3)静态绑定:绑定的是对象的静态类型,其特性(如函数)依赖于对象的静态类型,发生在编译期。
(4)动态绑定:绑定的是对象的动态类型,其特性(如函数)依赖于对象的动态类型,发生在运行期。

你可能感兴趣的:(C++中静态绑定和动态绑定)