C++动态绑定

绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。绑定是在编译时进行的,叫作静态绑定,也叫做静态联编。动态绑定(动态联编/运行时绑定)则是在运行时进行的,因此,一个给定的过程调用和代码的结合直到调用发生时才进行。

(1)在C++语言中,当我们使用基类的引用(或指针)调用一个虚函数时将发生动态绑定,所以说虚函数是动态绑定的基础。
(2)动态绑定是和类的继承以及多态相联系的,在继承关系中,子类是父类的-一个特例,所以父类对象可以出现的地方,子类对象也可以出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。
(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!\n");
	}

private:
	int age;
	char name[32];
};

class Man:public Human
{
public:
	Man(){}
	~Man(){}

	void wearClothes()
	{
		printf("Man should wear pants!\n");
	}

};

class Woman :public Human
{
public:
	Woman() {}
	~Woman() {}

	void wearClothes()
	{
		printf("Woman should wear a skirt!\n");
	}

};

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;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值