C++ダイナミックバインド

1577 ワード

バインドは、プロシージャ呼び出しと応答呼び出しに必要なコードを結合するプロシージャです.バインドはコンパイル時に行われ、静的バインドとも呼ばれ、静的アセンブリとも呼ばれます.動的バインド(動的アセンブリ/ランタイムバインド)は、実行時に行われるため、呼び出しが発生するまで所定のプロシージャ呼び出しとコードの結合が行われません.
(1)C++言語では,基底クラスの参照(またはポインタ)を用いて虚関数を呼び出すと動的バインドが発生するため,虚関数が動的バインドの基礎となる.(2)動的バインディングはクラスの継承およびマルチステートに関連しており、継承関係ではサブクラスが親である-特例であるため、親オブジェクトが現れる場所、サブクラスオブジェクトも現れる.したがって、実行中に、1つのオブジェクトがメッセージ要求サービスを送信する場合、受信オブジェクトの具体的な状況に応じて要求された操作を実装方法に接続するを選択します.(3)動的バインドを使用すると、類似のタイプの違いをある程度無視し、それらのオブジェクトを統一的に使用することができる.(4)動的アセンブリは、オブジェクトポインタまたはオブジェクト参照によって虚関数を操作し、オブジェクトによって虚関数を操作する場合は、静的アセンブリによって虚関数を呼び出す.
Demo:
#include "iostream"

using namespace std;

//          human,    man、woman。
class Human
{
public:
	Human(){}
	~Human(){}

	virtual void wearClothes()
	//void wearClothes()
	{
		printf("I don't know what to wear!
"); } private: int age; char name[32]; }; class Man:public Human { public: Man(){} ~Man(){} void wearClothes() { printf("Man should wear pants!
"); } }; class Woman :public Human { public: Woman() {} ~Woman() {} void wearClothes() { printf("Woman should wear a skirt!
"); } }; void wear1(Human& people) { people.wearClothes(); } void wear2(Human* people) { people->wearClothes(); } void wear3(Human people) { people.wearClothes(); } int main() { Human human1; Woman girl; Man boy1; // wear1(human1); wear1(girl); wear1(boy1); // wear2(&human1); wear2(&girl); wear2(&boy1); // wear3(human1); wear3(girl); wear3(boy1); return 0; }