博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 编程思想——继承和组合
阅读量:6882 次
发布时间:2019-06-27

本文共 1795 字,大约阅读时间需要 5 分钟。

缺省是Private继承。

构造函数初始化表达式表允许显式调用成员对象的构造函数。
内置类型可以像是有单个构造函数的对象一样初始化。如 int i; i(123);但它并不是真的有构造函数。
构造函数调用顺序: 先调用基类构造函数,然后调用成员对象构造函数。成员函数构造函数调用顺序按声明顺序。
析构函数调用顺序: (和构造函数相反)
名字隐藏:在派生类中重定义的函数名会掩盖所有基类版本。
非自动继承的函数:构造/析构函数不能被继承,operator = 也不能被继承。
继承和组合都能把子对象放在新类中,都使用构造函数的初始化表达式去构造子对象。
is-a用继承表达,has-a用组合表达。
继承也就是取一个已存在的类,并制作它的一个专门的版本。
对viod指针调用delete,它只释放内存而不调用析构函数。
用组合还是继承,判断方法之一是确认:是否需要新类向上映射
任何向上映射都会损失对象的类型信息。

 

***************《》*********************

from: http://www.cnblogs.com/whitewolf/archive/2010/05/03/1726519.html

  最近一个师弟问某实现是该用对象持有(其实就是组合)还是集成关系实现好。所以就在这里简单的浅谈一下,仅是个人观点,仅供参考。如果写的不对的地方请指出。

     首先它们都是实现系统功能重用,代码复用的最常用的有效的设计技巧,都是在设计模式中的基础结构。相信大家已了解的,类继承允许我们根据自己的实现来覆盖重写父类的实现细节,父类的实现对于子类是可见的,所以我们一般称之为白盒复用。对象持有(其实就是组合)要求建立一个号的接口,但是整体类和部分类之间不会去关心各自的实现细节,即它们之间的实现细节是不可见的,故成为黑盒复用。

     继承是在编译时刻静态定义的,即是静态复用,在编译后子类和父类的关系就已经确定了。而组合这是运用于复杂的设计,它们之间的关系是在运行时候才确定的, 即在对对象没有创建运行前,整体类是不会知道自己将持有特定接口下的那个实现类。在扩展方面组合比集成更具有广泛性。

    继承中父类定义了子类的部分实现,而子类中又会重写这些实现,修改父类的实现,设计模式中认为这是一种破坏了父类的封装性的表现。这个结构导致结果是父类实现的任何变化,必然导致子类的改变。然而组合这不会出现这种现象。

    对象的组合还有一个优点就是有助于保持每个类被封装,并被集中在单个任务上(类设计的单一原则)。这样类的层次结构不会扩大,一般不会出现不可控的庞然大 类。而累的继承就可能出来这些问题,所以一般编码规范都要求类的层次结构不要超过3层。组合是大型系统软件实现即插即用时的首选方式。

   在设计模式中这两个概念同时出现的地方就是Adapter模式:对象适配(组合)和类适配(继承)。一般我们提倡用对象适配而不是类适配。基于上面的原 因。还有就是在我们的Java和.NET这些完全面向对象的语言而言类的继承是单继承,取消了C++等的多继承。下面放两个这两种方式的UML图:

类适配图:

 

   

对象适配图:

 

     最后还说一句,“优先使用对象组合,而不是继承”是面向对象设计的第二原则。但并不是说什么都设计都用组合,只是优先考虑组合,更不是说继承即使不好的设计,应该用组合,应为他们之间也有各自的优势。下面是他们之间的优缺点比比较表:

组 合 关 系

继 承 关 系

优点:不破坏封装,整体类与局部类之间松耦合,彼此相对独立

缺点:破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性

优点:具有较好的可扩展性

缺点:支持扩展,但是往往以增加系统结构的复杂度为代价

优点:支持动态组合。在运行时,整体对象可以选择不同类型的局部对象

缺点:不支持动态继承。在运行时,子类无法选择不同的父类

优点:整体类可以对局部类进行包装,封装局部类的接口,提供新的接口

缺点:子类不能改变父类的接口

缺点:整体类不能自动获得和局部类同样的接口

优点:子类能自动继承父类的接口

缺点:创建整体类的对象时,需要创建所有局部类的对象

优点:创建子类的对象时,无须创建父类的对象

转载于:https://www.cnblogs.com/nliao/archive/2013/01/19/2868037.html

你可能感兴趣的文章
mySQL 教程 第11章 索引
查看>>
从几次应聘看职业发展
查看>>
使用组策略禁止域用户运行特定程序
查看>>
2011年以来发表文章一览表
查看>>
Android切近实战(七)
查看>>
技术沟通者的自我修养
查看>>
Mysql数据库用source命令导入SQL文件
查看>>
担当力1:担当力模型简介
查看>>
MongoVUE下实现MongoDB的Group分组查询
查看>>
Exchange企业实战技巧(13)配置存储配额与邮箱大小限制
查看>>
《统一沟通-微软-技巧》-19-Lync 2010如何使用智能手机中联系人
查看>>
【虚拟化实战】存储设计之三MultiPathing
查看>>
书摘—职场不逃跑
查看>>
新书发布《大数据时代的IT架构设计》
查看>>
《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)
查看>>
如今的淘宝为什么越来越难做?几个事实摆在我们面前
查看>>
云在天之南——我的七天七夜(初识丽江)
查看>>
再谈PHP从入门到精通需要几年
查看>>
动软.NET系统框架发布免费版本
查看>>
python 学习笔记 表达式(9)
查看>>