C++动态绑定

Posted u012507022

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

以上是关于C++动态绑定的主要内容,如果未能解决你的问题,请参考以下文章

c++面向对象的程序设计

C++虚函数与非虚函数的区别。

C++模板类模板的全部特例化和局部特例化(偏特化-partial specialization)

深入理解C++的动态绑定和静态绑定

C++动态绑定

C++动态绑定