早/晚绑定区别

template1.h

#pragma once
// 程序库开发人员
class Library1
{
public:
	void step1() {}
	void step3() {}
	void step5() {}

	virtual ~Library1() {}
};

// 应用开发人员
class Application1 : public Library1
{
public:
	bool step2(){ return true; }
	void step4(){}
};

template2.h

#pragma once
// 程序库开发人员
class Library2
{
public:
	void step1() {}
	void step3() {}
	void step5() {}

	// 稳定的 template method(模板方法)
	void run()
	{
		step1();
		if (step2())	// 支持变化 ===>虚函数的多态调用
		{
			step3();
		}

		for (int i = 0; i < 4; i++)
		{
			step4();    // 支持变化 ===>虚函数的多态调用
		}

		step5();
	}

	virtual bool step2() = 0;
	virtual void step4() = 0;

	virtual ~Library2() {}
};

// 应用开发人员
class Application2 : public Library2
{
public:
	bool step2() override { return true; }
	void step4() override {}
};

main

#include <iostream>
#include"template1.h"
#include"template2.h"
int main()
{
	//早绑定
	//Application1 app1;
	//app1.step1();
	//if (app1.step2())
	//{
	//	app1.step3();
	//}

	//for (int i = 0; i < 4; i++)
	//{
	//	app1.step4();
	//}

	//app1.step5();

	// 晚绑定
	Application2 app2;
	app2.run();
   // std::cout << "Hello World!\n";
}

 

posted @ 2019-11-15 21:06  jadeshu  阅读(131)  评论(0编辑  收藏  举报