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