接口继承(说明继承)与实现继承



       学习COM组件相关内容,看到COM接口的继承性与C++中类的继承性的区别中讲到:类继承不仅是说明继承,也是实现继承;而接口继承只是说明继承,
只继承了基接口的成员函数说明,并没有继承基接口的实现。对此不是非常理解,查了相关的一些资料。
       用虚函数、纯虚函数、非虚函数来进行解释:
       虚函数主要是解决派生类与基类相同函数的重复定义问题。
     (1)虚函数:用virtual来定义。
     (2)纯虚函数:纯虚函数在基类中没有具体定义,它们被初始化为0。 任何用纯虚函数派生的类,都要自己提供该函数的具体实现。
               定义纯虚函数
               virtual void fun(void) = 0;
     (3)非虚函数:普通成员函数,无virtual关键字修饰。
   
     至于为什么要定义这些函数,我们可以将虚函数、纯虚函数和非虚函数的功能与接口继承与实现继承联系起来:
     声明一个纯虚函数(pure virtual)的目的是为了让派生类只继承函数接口,也就是上面说的接口继承。
     纯虚函数一般是在不方便具体实现此函数的情况下使用。也就是说基类无法为继承类规定一个统一的缺省操作,但继承类又必须含有这个函数接口,并对其分别实现。但是,在C++中,我们是可以为纯虚函数提供定义的,只不过这种定义对继承类来说没有特定的意义。因为继承类仍然要根据各自需要实现函数。
     通俗说,纯虚函数就是要求其继承类必须含有该函数接口,并对其进行实现。是对继承类的一种接口实现要求,但并不提供缺省操作,各个继承类必须分别实现自己的操作。

     声明非纯虚函数(impure virtual)的目的是让继承类继承该函数的接口和缺省实现。与纯虚函数唯一的不同就是其为继承类提供了缺省操作,继承类可以不实现自己的操作而采用基类提供的默认操作。

     声明非虚函数(non-virtual)的目的是为了令继承类继承函数接口及一份强制性实现。相对于虚函数来说,非虚函数对继承类要求的更为严格,继承类不仅要继承函数接口,而且也要继承函数实现。也就是为继承类定义了一种行为。

     总结:
     纯虚函数:要求继承类必须含有某个接口,并对接口函数实现。
     虚函数:继承类必须含有某个接口,可以自己实现,也可以不自己实现,而采用基类定义的缺省实现。
     非虚函数:继承类必须含有某个接口,必须使用基类的实现。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值