C++面向对象高级编程(上)学习笔记

类与类之间三种主要关系

GeekBand 侯捷

这里写图片描述

1、Conposition(复合)has -a

典例:

这里写图片描述

复合的部分特点:

1、前者A拥有后者B,A中的所有功能都有B来做。
2、一般B的功能更加强大,一些功能“改头换面”用来实现A的功能。
3、A与B紧密相连,生存期相同。

Composition(复合)语法:

这里写图片描述

Composition(复合)的图形表现方式

这里写图片描述
黑色表示有东西,前者是容器,它容纳了后者。

Composition(复合)的内存方式

这里写图片描述
直观的理解如下:
这里写图片描述上图中,在创建dequee类型的c时,系统分配的空间为40。

Composition(复合)关系下的构造和析构

需要说明的是,外部构造函数先调用内部构造函数,完后,再执行外部构造函数自己的剩余部分。
这里写图片描述
而外部析构函数先析构自己的独有的部分,完后,再执行内部析构函数。
这里写图片描述

2、Delegation(委托),Composition by reference(指针相连)

典例:

这里写图片描述

Delegation(委托)的部分特点:

1、A可以在任何有需要的时候调用B,把任务委托给B来做。
2、前者A拥有后者B,A中的所有功能都有B来做。
3、两者通过指针联系,这种联系较弱。
4、A与B使用指针相连,二者的生存期不一致。

Delegation(委托)的语法:

这里写图片描述

Delegation(委托)的图形表现形式

这里写图片描述
空心表示使用的是指针,String拥有StringRep

引申形式:

这里写图片描述
上图中,三个对象共享一个Hello,n用作记录对象个数。
如果a想改动Hello,系统会copy一个Hello出来供A来修改,但b,c不变,这一过程叫“copy on write”。

补充:

1.委托的方式非常实用,特有名称为Handle/Body(pImpI)
2.指针可以指向不同的实现类,这具有一定弹性,B无论怎样变动都不会影响A,这一手法又称“编译防火墙”,A不用再编译,只需编译B。

Inheritance(继承)is-a

典例:

这里写图片描述

Inheritance(继承)的特点:

1、继承有三种方式,即public/private/protected
2、Public继承中,子类对象含有父类成分。

Inheritance(继承)语法之一(public):

这里写图片描述

Inheritance(继承)的图形表现方式:

这里写图片描述
图中,_List_node为_List_node_base的子类
Inheritance(继承)的存储方式:
这里写图片描述
说明:子类的对象里面有父类的成分。
Inheritance(继承)关系下的构造和析构
这里写图片描述
这里写图片描述

补充:

1、继承在和虚函数的结合上大放光彩;
2、base class 的dtor必须是virtual,否则会出现undefined behavior——也就是析构由外到内的好行为。只要class现在或将来可能成为父类,就要把class设为virtual.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值