C++における静的バインディングと動的バインディング

1102 ワード

//  :                       
#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)動的バインド:バインドされているのはオブジェクトの動的タイプであり、その特性(関数など)はオブジェクトの動的タイプに依存し、実行期間中に発生する.