浅析C++中的is-a和has-a关系(公有继承、包含、私有继承)
派生类和基类之间的特俗关系是基于C++继承的底层模型的。
总所周知,C++具有三种继承:公有继承、私有继承、保护继承。
最常见的就是公有继承,它建立一种is-a的关系。
如何理解is-a呢?即派生类对象也是一个基类对象,可以对基类对象执行的任何操作,也可以对派生类对象执行。
举个栗子:
有一个水果Fruit类,可以保存水果的重量和热量;
香蕉是一种水果,所以可以从Fruit类派生出Banana类;
Banana类继承了父类的所有数据成员,因此,Banana对象将包含表示香蕉重量和热量的成员;
此外,Banana类可以添加专门用于香蕉的成员。
但是,Banana类不能删除基类的Fruit的属性。
因此Banana is a kind of Fruit,即我们所说的is-a关系。class Banana:public Fruit
{
};
那么has-a关系呢?
同样举个栗子:
午餐可能包括水果,但是午餐并不是水果;
所以不能从Fruit公有派生出Lunch类;
在午餐中加入水果的正确方法是将其作为一种has-a关系。
那么如何实现has-a呢?
通常的是有两种方法:包含和私有继承。
所谓的包含就是将Fruit对象作为Lunch类的数据成员,即新的类包含一个类的对象。
所谓的私有继承就是class Lunch:private Fruit。
通过分析我们知道:
使用公有继承而已继承接口,也可能还有实现。获得接口是is-a关系的组成部分;
而使用包含,类可以获得实现,但不能获得接口。不继承接口是has-a关系的组成部分。
那么如何实现包含,如何实现私有继承,以及两种建立has-a关系的方法有何不同,将会在后续的博客中进行阐述。
浅析C++中的is-a和has-a关系(公有继承、包含、私有继承)相关推荐
- C++中公有继承、保护继承、私有继承
就class之间的关系做一个简单的定义,继承base class的class,base class可以认为class都是自己的子女. 1.public:public表明该数据成员.成员函数是对所有用户 ...
- 关于C++中公有继承、私有继承、保护继承的讨论
一.文章来由 简单明了的理由,老生常谈但是没真正解决的问题,想搞清楚这个问题. 二.冗长的定义 我们先来看看这些冗长的定义: 公有继承: 当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性 ...
- 浅析 JavaScript 中的 函数 uncurrying 反柯里化
柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...
- 浅析Python中bytes和str区别
本博转载自:Chown-Jane-Y的浅析Python3中的bytes和str类型 Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示, ...
- 计算机网络中路由器,浅析计算机网络中的路由器
浅析计算机网络中的路由器 通过路由器的结构 ,分析了路由器的基本原理及功能 ,进而 (本文共2页) 阅读全文>> 由于路由器的应用越来越广泛,所以对网络路由器在使用过程中发生的故障,我们也 ...
- 浅析Java中的final关键字
浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...
- 浅析py-faster-rcnn中不同版本caffe的安装及其对应不同版本cudnn的解决方案
浅析py-faster-rcnn中不同版本caffe的安装及其对应不同版本cudnn的解决方案 参考文章: (1)浅析py-faster-rcnn中不同版本caffe的安装及其对应不同版本cudnn的 ...
- mysql concat例子_浅析MySQL中concat以及group_concat的使用
说明: 本文中使用的例子均在下面的数据库表tt2下执行: 一.concat()函数 1.功能:将多个字符串连接成一个字符串. 2.语法:concat(str1, str2,...) 返回结果为连接参数 ...
- 浅析软件工程中的UML建模技术
一.基本信息 标题:浅析软件工程中的UML建模技术 时间:2018 出版源:电子世界 领域分类:软件工程:UML建模技术:需求分析 二.研究背景 问题定义:软件工程中UML建模技术的研究 难点:明确软 ...
最新文章
- 安卓升级固件update.zip解析
- VTK:彩色注释立方体用法实战
- pert计算公式期望值_PERT和三点估算技术
- Java服务CPU飙到99%问题排查
- 论中国和欧洲程序员对加班的态度
- 在SAP云平台上部署和运行Docker应用
- Android uevent
- Docker如何删除一个镜像
- 计算机组成原理实验内存读数,计算机组成原理实验
- Web安全之点击劫持
- SpringBoot学习之一 Unable to find a single main class from the following candidates
- 普元eos运行环境下的逻辑流及页面流反编译工具
- fw300r虚拟服务器设置,迅捷(FAST)FW300R无线路由器怎么设置
- win10下Google Chrome 打不开网页的解决方案
- BZOJ3560 DZY Loves Math V
- HP笔记本电源开关灯常亮,不能开机的处理
- PCB相关知识-焊盘Pad
- 网页链接跳转qq聊天界面以及QQ群是什么实现的
- Excel绘制图表时X轴在有数据点的地方才出现刻度标签
- ext2 / ext3 结构分析