如何在派生类中的某个方法里先执行一段父类的默认行为

有的时候我们在继承的时候,我们经常会遇到这样的需求,我们想在子类中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();

 


 

posted on 2023-02-19 14:54  疾速瓜牛  阅读(19)  评论(0编辑  收藏  举报

导航