本文主要是介绍Effective C++ 条款35,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本条款作者所要表达的用意就是对于virtual成员函数的功能实现可以以其他形式代替。有的时候单纯的virtual函数可能无法满足真实编程的需要。
第一种方法:
定义一个private virtual函数,再定义一个non-virtual函数,non-virtual函数调用private virtual函数实现功能。
代码如下:
class person
{
public:
virtual int getHealth(){return health;}private:int health;
};class child:public person
{};child c;
c.getHealth();//获得健康指数对比:
class person
{
public:
int getHealth()
{getHealthValue();}private:int getHealthValue(){return health;}int health;
};class child:public person
{};child c;
c.getHealth();//获得健康指数
第二种方法是函数指针法。将获得健康指数的功能函数的函数指针存储为类的private数据成员。通过这种方式,可以随时通过变换函数指针使用不同类型的评估标准。同类的不同之间的健康评估标准也不一定相同。程序灵活性很大。
class Person
{
private:int health;
public:typedef int(*HealthFunc)(const Person&);Person(int bh = 10, HealthFunc Func= NULL) :health(bh), Poniter(Func){}int GetHealthValue(){if (Poniter){return Poniter(*this);}else{return 0;}}int GetBaseHealth() const{return health;}
private:HealthFunc Poniter;
};class child : public Person
{
public:child(int bh, HealthFunc Func) :Person(bh, Func){}};int HealthForCommonMonster(const Person& gc)
{return gc.GetBaseHealth();
}int HealthForKnightBoss(const Person& gc)
{return 2 * gc.GetBaseHealth();
}child d;
d.GetHealthValue();
这篇关于Effective C++ 条款35的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!