谈c++运算符dynamic_cast

    首先抛出一个问题,c++标准委员会为什么要引入dynamic_cast?

    从一门计算机程式语言发展与演变的角度来谈,那是因为c++引入dynamic_cast会让其变得更具有灵活性和弹性。为什么这样讲,首先我们要明白,任何最初美好的软件设计都会随着需求的增加以及代码的膨胀而会变得极其复杂。所以软件工程里特别强调软件设计要遵循开放封闭原则,这样会延长软件重构周期以及节约人力成本。OK, 下面我具体来谈dynamic_cast在程序设计过程中发挥的作用,以一个代码场景来引导大家去思考。假设我们使用了一个第三方的库,库中的基类封装并提供了相关的虚函数接口,我们实现自己的多个子类。当我们利用虚函数的动态机制避免重载提供统一的API时,我们面临的一个问题便是有时候我们需要在这个API里面对子类进行dispatch。显然,这正是dynamic_cast的用武之处!但很快也许有人会提出,为什么不在库的基类中增加一个enum类型? 这样可以通过switch这个枚举类型来进行dispatch,从而减少dynamic_cast运行时动态查询的开销。哈哈哈,问题提的真棒!试问库的设计者在设计这个库的时候,他能够预料到你们的使用场景吗?

    至此,答案回归问题的出发点,c++引入dynamic_cast会让其变得更具有灵活性和弹性。

转载于:https://www.cnblogs.com/forkworld/p/5871713.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值