C++ primer Plus(第六版)第十三章 类继承 章节编程练习答案

1.以下面的类声明为基础:

派生出一个Classic类,并添加一组char成员,用于存储指出CD中主要作品的字符串。修改上述声明,使基类的所有函数都是虚的。如果上述定义声明的某个方法并不需要,则请删除它。使用下面的程序测试您的产品:

完成如下:

2.完成练习1,但让两个类使用动态内存分配而不是长度固定的数组来记录字符串。

思路:练习1中,我们的成员变量的类型是使用的char数组,本题要求我们改为动态内存分配,所以成员变量的类型我们可以选为char指针,那么这里最最需要注意的就是,这样改过之后,析构函数就必须要发挥作用了,析构函数内部就必须要把构造函数里面初始化时动态分配的内存给delete掉

首先对于类声明的头文件,我们只需要把char数组都改为char指针即可,修改后如下:

接下来对于实现文件呢,一方面注意构造函数内部初始化时,都必须首先进行动态内存分配,然后才可以进行strcpy_s函数的赋值,另一方面就是析构函数必须把构造函数里面动态分配的内存都删掉。其他内容不需要改变。

所以实现文件cd.cpp修改后如下:

测试代码不变

3.修改baseDMA-lacksDMA-hasDMA类层次,让三个类都从一个ABC派生而来,然后使用与程序清单13.10相似的程序对结果进行测试。也就是说,它应使用ABC指针数组,并让用户决定要创建的对象类型。在类定义中添加virtual View()方法以处理数据显示。

4. Benevolent Order of Programmers用来维护瓶装葡萄酒箱。为描述它,BOP Portmaster设置了一个Port类,其声明如下:

{……代码省略……}

show()方法按下面的格式显示信息:

Brand: Gallo

Kind: tawny

Bottles: 20

operator<<()函数按下面的格式显示信息(末尾没有换行符):

Gallo, tawny, 20

PortMaster完成了Port类的方法定义后派生了VintagePort类,然后被解职——因为不小心将一瓶45度Cockburn泼到了正在准备烤肉调料的人身上,VintagePort类如下所示:

{……代码省略……}

您被指定负责完成VintagePort。

a. 第一个任务是重新创建Port方法定义,因为前任被开除时销毁了方法定义。

b. 第二个任务是解释为什么有的方法重新定义了,而有些没有重新定义。

c. 第三个任务是解释为何没有将operator=()和operator<<()声明为虚的。

d. 第四个任务是提供VintagePort中各个方法的定义。

已知头文件如下:

其余完成如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值