NVI

来源:互联网 发布:golang time.after 编辑:程序博客网 时间:2024/06/07 03:11

这是我写的简易版的, Effective C++, 3rd Edition, Item 35: 考虑可选的 virtual functions(虚拟函数)的替代方法

#include<iostream>//item 35using namespace std;/*------------------NVI--------------------*/class A{public:    void f()    {        f1();        cout << "f";    }private://protected:    virtual void f1()    {        cout << "A::f1";    }};class B : public A{//public:    virtual void f1()    {        cout << "B::f1";    }};

书上的程序

/*virtual*/class GameChareter1{public:    virtual int healthVaule()const;};/*strategy*/class GameChareter{public:    typedef int (*GameHealthCalcFcn) (GameChareter);// '*' zai qianmian    GameChareter(GameHealthCalcFcn ht = defaultHealht):    health(ht) { }     int healthvaule()const    {        return health(*this);//this is a fucking fcn    }private:    GameHealthCalcFcn health;   };

//类里面什么都没有(关于血量),这样只有通过一个指针调用类外函数,来返回当前血量,
//而且你也必须在类外定义掉血方式,这样一来,用过指针调用的函数,又有定义多个的必要了
//
//定义类外函数,然后把指针返回给类内指针,才是正道,把定义的函数指针,来创建函数是错误的想法

0 0