首页 > 其他分享 >如何在派生类中的某个方法里先执行一段父类的默认行为

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

时间:2023-02-19 15:14:42浏览次数:31  
标签:peel 子类 void 默认 FruitPriv Fruit 派生类 父类

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

相关文章

  • 默认参数、占位参数、函数重载
    (一)默认参数C++函数中的形参列表中的形参是可以有默认值的语法:返回值类型函数名(参数=默认值){}注意事项:如果我们自己传入数据,就用自己的数据,如果没有,就用默认值如果......
  • 关于MySQL 8.0 默认使用了新的身份验证插件 caching_sha2_password,而旧版本的 MySQL C
    要解决这个问题,有以下两种方法:1、使用新版本的MySQLConnector/NET。您可以从MySQL官网下载最新版本的MySQLConnector/NET,它支持新的caching_sha2_password插件。......
  • vue2 - 插槽solt,默认插槽,具体名插槽,作用域插槽
    1.默认插槽作用:会把父组件human中的内容全部解析到子组件中的slot中父组件:<template><divid="App"><!--子组件--><human><!--解析到子组件中的内......
  • 思科默认的管理距离
    2023-02-18路由选择协议   默认管理距离直连路由   0指向接口的静态路由   0指向下一条的静态路由   1EIGRP汇总路由   5外部BGP   20内部EIGRP......
  • 为什么默认情况下析构函数不是虚拟的
    因为很多类并不是设计来作为基类使用的,虚函数仅在用作派生类对象接口的类中有意义(通常分配在堆上并通过指针或引用访问)。那么我什么时候应该声明一个析构函数为虚拟的呢?......
  • Python3默认字符编码的问题
    输出报错UnicodeEncodeError:'ascii'codeccan'tencodecharactersinposition0-1:ordinalnotinrange(128)>>>importsys>>>sys.stdout.encoding'ANSI_X3.4-1......
  • 建筑CAD软件导出图纸时如何默认保留墙基线?
    有些设计师在建筑CAD软件中绘制完成图纸后,想要在导出图纸的时候默认保留墙基线,但却不知道该如何设置,本节建筑CAD教程就和小编一起来了解一下浩辰CAD建筑软件中导出图纸时是......
  • 建筑CAD软件如何设置当前默认层高?
    在绘制CAD建筑图的过程中,必然少不了要对层高进行设置,如果每层的层高都一样,想要调整建筑CAD软件默认当前层高的话该如何设置?本节建筑CAD教程就和小编一起来了解一下浩辰CAD......
  • linux修改默认ssh端口
    一、修改配置文件1、取消注释Port22,增加自己想要的ssh端口。vim/etc/ssh/sshd_configPort22Port6666#AddressFamilyany#ListenAddress0.0.0.02、ssh默认监听......
  • 【SQL】建表是给时间字段增加默认值
    建表是给时间字段增加默认值oracle DEFAULTSYSDATE  sqliteVARCHAR2(19)DEFAULT(DATETIME(CURRENT_TIMESTAMP,\'localtime\'))        ......