- 虚函数
代码
using namespace std;
class ABase {
public:
virtual void init();
};
void ABase::init() {
cout << "load ABase" << endl;
}
class A : public ABase{
public:
void init();
};
void A::init() {
cout << "A class" << endl;
}
template<class T>
class BBase {
public:
virtual void init() = 0;
};
class B : BBase<B> {
public:
void init();
};
int main()
{
A a;
ABase* ab = &a;
a.init();
ab->init();
}
运行结果
总结
- 纯虚函数不可实例化,子类必须实现该方法
- 声明为虚函数的方法,
2.模板
代码
using namespace std;
template<class T>
class BBase {
public:
virtual void init();//子类未定义init方法,所以子类调用父类的init
vector<T> vSet; //通过子类调用父类init方法,通过模板将子类加载进vSet
void out();
};
template<class T>
void BBase<T>::init() {
T T;
vSet.push_back(T);
cout << "push_back T" << endl;
}
template <class T>
void BBase<T>::out() {
vector<T>::iterator it = vSet.begin();
for (; it != vSet.end(); ++it)
it->load();
}
class B : public BBase<B> {
public:
void load(); //子类独有方法,无法用虚函数特效通过基类调用
};
void B::load() {
cout << "load B" << endl;
}
int main()
{
B b;
BBase<B>* bb = &b;
b.init(); //子类调用父类的init,加载vSet
bb->out();//调用子类的load方法
}
运行结果
push_back T
load B
请按任意键继续. . .
总结
模板配合虚函数使用可以实现在基类中调用子类,无需在基类加上子类的每个方法,使子类用户更多的自由度。
3.项目中运用
继承关系:
class JkTrade : public TradeProcessBase < JkWork >
template < class T > class TradeProcessBase : public CreditProcess < T >
template < class T > class CreditProcess : public CreditProcessBase
程序:
CreditProcessBase{
virtual unsigned int process() = 0; //纯虚函数
virtual bool loadData() = 0;//纯虚函数
}
Template<class T>
Class CreditProcess {
T m_record;//模板定义了关键变量
virtual unsigned int process();//虚函数,未实现
virtual bool loadData();//虚函数,该处实现了该方法,并且定义了m_record变量
}
Tempalte<class T>
Class TradeProcessBase{
virtual unsigned int process();//虚函数,该处实现了该方法,并且调用了父类loadData方法
}
Class JkTrade {
virtual bool sendInstruction();//具体业务逻辑
}
入口类(此处只是描述了个大概流程):
Class CreditBack{
CreditProcessBase * m_trade = New JkTrade; //生成业务类
ParaManager * m_paraMan;
Bool CreditBack::loopProcess(){
m_trade->process(); //基类指针,调用了具体子类实现的process方法,这里是TradeProcessBase:process,接着实例变量m_record为JkTrade 类型,通过m_record实现了具体子类的的方法。
}
}