早/晚绑定区别
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";
}