class T11
{
protected:
T11(){ }
virtual ~T11(){ }
public:
void test()
{
a1();
a2();
}
protected:
virtual void a1() = 0;
virtual void a2() = 0;
};
class T22: public T11
{
public:
T22() {}
~T22(){};
protected:
virtual void a1() { cout <<"T22 处理 a1"<<endl; }
virtual void a2() { cout<<"T22 处理 a2"<<endl;}
};
class T33:public T11
{
public:
T33() {}
~T33(){};
protected:
virtual void a1() { cout <<"T33 处理 a1"<<endl; }
virtual void a2() { cout<<"T33 处理 a2"<<endl;}
};
int _tmain(int argc, _TCHAR* argv[])
{
T11* p22 = new T22;
p22->test();
delete p22;
T11* p33 = new T33;
p33->test();
delelte p33;
}
基类中封装子类对象都需要的公共操作test。各子类在该公共操作中,需要处理的流程是一样的,但各自处理的方式又有所不同。因此,基类中提供了虚函数a1和a2,子类分别根据自己的业务来实现。
如果各子类的公共操作中实现的步骤不一致,也可将test声明为虚函数,各子类实现该函数中相关的操作。