原文网址:https://blog.csdn.net/CoderAldrich/article/details/83270337
#include <iostream>
using namespace std;
class AbstractClass {
public:
void TemplatrMethod() {
PrimitiveOperation1();
cout<<"TemplateMethod"<<endl;
PrimitiveOperation2();
}
protected:
virtual void PrimitiveOperation1() {
cout<<"Default Operation1"<<endl;
}
virtual void PrimitiveOperation2() {
cout<<"Default Opetation2"<<endl;
}
};
class ConcreteClassA : public AbstractClass {
protected:
virtual void PrimitiveOperation1() {
cout<<"ConcreteA Operation1"<<endl;
}
virtual void PrimitiveOperation2() {
cout<<"ConcreteA Opetation2"<<endl;
}
};
class ConcreteClassB : public AbstractClass {
protected:
virtual void PrimitiveOperation1() {
cout<<"ConcreteB Operation1"<<endl;
}
virtual void PrimitiveOperation2() {
cout<<"ConcreteB Operation2"<<endl;
}
};
int main() {
AbstractClass *pabstract_a = new ConcreteClassA;
pabstract_a->TemplatrMethod();
AbstractClass *pabstract_b = new ConcreteClassB;
pabstract_b->TemplatrMethod();
if (pabstract_a) {
delete pabstract_a;
}
if (pabstract_b) {
delete pabstract_b;
}
}
输出结果:
ConcreteA Operation1
TemplateMethod
ConcreteA Opetation2
ConcreteB Operation1
TemplateMethod
ConcreteB Operation2