第11章 定义抽象数据类型(续)

前面我们讨论了在定义抽象数据类型的时候应该如何去考虑,总结出了一点:用户使用及类型语义为导向进行设计。

 

这堂课我们将以一段好玩的代码来继续我们的类设计(代码已经发送到群邮件中)。

 

我给出了VC2005VC2008的两个版本的工程,bin目录下是已经编译好的程序。如果没有这两个版本的IDE的话,那么可以用代码文件重新创建工程,并进行设置:

工程为win32应用程序工程,工程使用预编译头,将stdafx.cpp设置为创建预编译头。

 

本堂课的重点在于Ball.hBall.cpp这两个文件中的内容,其他代码是用来创建窗口的,不用仔细阅读。

 

我们定义了个类,叫做Ball。这是个表示球的类(这里的球的概念等同于平面的椭圆)。

 

用户使用导向:显示一个窗口,并在窗口中绘制一个移动的球,并且这个球超出了窗口范围会自动弹回。从这里我们可以得到的信息是:需要一个窗口对象、一个球对象。窗口负责绘制球,并控制球的位置,那么我们的球应该具备一个绘制接口和一个设置位置的接口。

 

类型语义导向:球应该具有宽度和高度(尺寸),绘制在窗口应该具有一定的颜色。那么我们的球还应该具备设置尺寸的接口和设置颜色的接口。

 

从以上得到的信息,我们就可以设计我们的球类了:

  

思考Ball的拷贝和赋值语义:Ball类对象拷贝构造,得到的是已有的Ball类对象的位置和颜色信息,赋值也一样,那么默认的拷贝构造和赋值操作的行为是符合其语义的,那么我们就不用再去实现了。

 

使用者在调整Ball的位置的时候,通常想要参考其原来的位置,那么我们应该提供一个获取小球当前位置接口。同理也应该提供一个获取小球当前颜色的接口。

 

对于球在窗口内进行移动和反弹的效果不是我们这堂课的主题,有兴趣的可以阅读TestWindow这个窗口类中的OnTimer中的代码。

 

语音课堂上我们接着讨论如何去修改和扩展这个Ball类,让它能够满足我们更多的需求。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值