向下转型与layering技术

 

1,从一个base class指针转为一个derived class指针叫做downcast.因为是从继承体系的上方移到下方。

   据说downcast很丑陋,而由dynamic_cast实现的safe-downcasting好一点,但避免不了if-then-else 风格,虚函数可以搞定。万非得已,不要出此下策。

  关于安全转型,dynamic_cast安全转型比static_cast的优势,在于能够侦测到是否转型成功,如果不成功则返回一个NULL指针。

  if 语句可以定义变量;VC6没有支持这项新语法;

    if(SavingAccount *psa = dynamic_cast<SavingsAccount*>(*p)){};

   代替

            SavingAccount *psa;

            if(psa = dynamic_cast<SavingsAccount*>(*p)){};

2,什么叫layering?

  所谓layering是指以一个class为本,建立另一个class,并令外层包含内层的对象作为数据成员。Thinging c++里面叫做组合。

  举个例子

                   class Address{。。。};

                 class Person{

                          public:

                                   。。。

                         private:

                                  string name;

                                  Address address;

                        };

       如果说公有继承是Is-a,那么layering就意味着Has-a;如何在二者之间进行选择,需要分析

      典型例子,是矩形和正方形,Set 和 List的关系。Set不内含重复元素,List和内含重复元素,所以用Is-a描述不恰当的。组合可以解决。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值