有的时候我们在继承的时候,我们经常会遇到这样的需求,我们想在子类中override父类的方法,但是每个子类的开头其实又有一段common的代码要执行,我们不想在每个派生的类中都去重复一次,而是希望最好能够先执行一下父类的方法,然后再执行子类的override的部分,针对这种需求该如何实现呢?可以参考下面的这种做法:
class FruitPriv; class Fruit { public: Fruit(FruitPriv* priv):mPriv(priv){;} void peel(void) { //注意这里不应是virtual的方法,子类直接掉父类的非虚方法,然后走到mPriv去调用自己的peel方法 cout << "fruit peel" << endl; // common的地方 mPriv->peel(); } private: FruitPriv* mPriv; }; class FruitPriv { public: virtual void peel(); //注意这里是virtual的方法 }; class Banana : public Fruit { public: Banana():Fruit(new BananaPriv()){;} virtual void peel(void) { cout << "banana peel" << endl; } }; Fruit *fruit = new Banana; fruit->peel();
标签:peel,子类,void,默认,FruitPriv,Fruit,派生类,父类 From: https://www.cnblogs.com/Arnold-Zhang/p/17134735.html