而采用多态的方式实现接口和实现进行分离时,其通过生成对父类的指针指向其子类,达到可以采用接口和实现进行分离的目的。如下图所示,假如银行中包含存钱、取现以及转账等业务,那么自然的方法就是建立一个类,类内部加入相关方法,直接调用即可,如下所示:
class Banker
{
public:
void savemooney()
{
printf("%s", "存钱");
};
void transfermoney()
{
printf("%s", "转账");
}
void cashmoney()
{
printf("%s", "取钱");
}
protected:
private:
};
int main()
{
Banker *pbank = new Banker();
pbank->savemooney();
pbank->transfermoney();
pbank->cashmoney();
delete pbank;
}
该种方法简单直接,但是不能很好的满足继续添加的问题,假如银行又增加了一个海外业务板块,那么只能从Banker中继续添加该内容,那么不利于代码的维护和管理,因此,又必要将银行中的方法独立分开,将目前已经实现的方法封装起来,而以后需要扩充的方法留下接口,等到有需要的时候,直接通过接口实现就可以了。
/首先定义一个抽象类
//定义公用的接口
class ABanker
{
public:
virtual void task() = 0;
};
//存钱、转账以及取钱都通过该接口实现
class savemoney: public ABanker
{
public:
virtual void task()
{
printf("%s\n", "存钱");
}
};
class transfermoney:public ABanker
{
virtual void task()
{
printf("%s\n", "转账");
};
};
class cashmoney : ABanker
{
void task()
{
printf("%s\n", "取钱");
}
};
int main()
{
ABanker *pabanker = NULL;
pabanker = new savemoney;
pabanker->task();
delete pabanker;
pabanker = new transfermoney;
pabanker->task();
delete pabanker;
}
这样通过将父类的指针指向其子类进行实现,便是多态的一个最直接的提现方式了,为了能够用一个函数实现不同类型的方法的调用,也就是说采用一个父类的指针对象,对这些类似的方法进行统一管理,可以将上述方法进一步做改进。完全可以建立一个新函数,这个新函数的参数是父类的指针对象。
void Method(ABanker *pabanker)
{
pabanker->task();
delete pabanker;
}
通过将父类的指针调用任务函数,可以方便的调用不同的子类函数,实现不同的功能能,假如银行还需要继续继续增加一个业务版块,那么只需要在ABanker父类的基础上增加继承函数即可,可以很方便的实现功能的扩展。
其实本质上来讲,就是通过一个接口函数ABanker()中的虚函数方法实现子类中方法的调用,所以每次在增加新的类,新的方法时,也需要在虚函数中添加新的函数,然后才能在子类中实现新的方法。