美文网首页
c++中的继承、组合和代理--GeekBand(第三周)

c++中的继承、组合和代理--GeekBand(第三周)

作者: 数据小冰 | 来源:发表于2016-05-30 08:00 被阅读94次
c++是典型的面向对象语言,所谓的面向对象语言包含着两部分内容:
  • 基于对象:就是关注单个class的设计与构建,比如成员变量和成员函数等等内容
  • 对象之间的关系:关注的是class之间的关系,对象之间的关系可以概括为继承、组合和代理3种

继承、组合和代理之间的区别:比如class A和class B。继承在逻辑上是一种"a kind of"的关系,比如student is a kind of human(学生是人类)。组合在逻辑上是一种" a part of"的关系,c++ primer书中有个经典的例子,Eye(眼睛)、Mouse(嘴巴)是Head(头)的一部分。代理和组合很像,不同在代理可以看成一种间接的组合,是通过指向对象的指针来实现的,用法非常灵活。

什么时候使用继承、组合和代理:就是在解决问题的时候,对象之间的关系该改用哪种方法。平时很强调的继承在使用的时候要非常慎重,不能仅仅通过直观的感觉,A和B之间是继承关系,其实应该从对象中函数功能的角度来考虑,即两个class之间有多大的复用度。因为继承是一种强耦合的关系,与面试对象的要求低耦合相反,实际用的过程要很小心。因为他降低了耦合性。意味着父类的改变会影响到子类代码的修改。组合是在B类中将A类对象作为其成员变量,A类代码的改变一般不影响B的功能,在初始化B类的时候初始化A。代理是在B类中创建一个A类成员对象指针,在A类中的方法中通过这个成员对象去调用它自己的方法,这种包装成员方法来获得一个新方法的技术可以避免继承导致完全暴露父类方法的问题,用法非常灵活。

初始化顺序和析构顺序:类直接的这3中关系,都是类与类的关系。当我们在初始化的时候,他们初始的顺序是个重点关注。在继承关系中,构造顺序是先调用基类的构造函数,然后在调用自己的构造函数,是一种由里而外的方式,而析构的时候恰恰相反,是按照先外面在里的方式,即先调用自己的析构函数在调用父类的析构函数。其他两种顺序不是很明确,依赖于实现的编译器等。

相关文章

  • c++中的继承、组合和代理--GeekBand(第三周)

    c++是典型的面向对象语言,所谓的面向对象语言包含着两部分内容: 基于对象:就是关注单个class的设计与构建,比...

  • GeekBand C++面向对象高级编程(三)

    本笔记为GeekBand C++面向对象高级编程(上)第二周课程之总结。 组合与继承 组合(composition...

  • 后端常见问题(全)

    C++ static 关键字有哪些用法 说说继承和组合的概念?什么时候应该用继承?什么时候应该用组合 C++ 的菱...

  • 第七章:复用类

    组合语法 继承语法 代理——继承和组合的中庸之道。将一个成员对象置于所要构造的类中,同时在此类暴露了该成员的所有方...

  • 复用类

    类复用方式 组合 继承 代理

  • 组合、继承、代理

    面向对象的复用技术: 组合: 组合体现的是整体与部分、拥有的关系,即has-a的关系。 继承: 继承是一种联结类与...

  • js一些技巧.md

    js中的constructor和prototype 组合继承与寄生继承 组合继承 可以继承实例属性和方法,也可以继...

  • ES5和ES6 实现继承方式

    在ES5 中:通过原型链实现继承的,常见的继承方式是组合继承和寄生组合继承;在ES6中:通过Class来继承 组合...

  • C++中的继承、组合、聚合和关联

    本文转载自:http://blog.csdn.net/kkforwork/article/details/4622...

  • 第二十一章 扩展

    c++没有extension语法,一般意义而言,c++完成扩展的功能通过继承和组合来实现。 class Base ...

网友评论

      本文标题:c++中的继承、组合和代理--GeekBand(第三周)

      本文链接:https://www.haomeiwen.com/subject/bswqdttx.html