只有有耐心圆满完成简单工作的人,才能够轻而易举地完成困难的事。
Only those who have the patience to do simple things perfectly ever acquire the skill to do difficult things easily.
C++博客
首页
新随笔
联系
聚合
管理
随笔-60 评论-98 文章-0 trackbacks-0
狗,哈士奇,跳蚤,继承,聚合,UpCast和DownCast
类的声明和实现文件,很简单,看注释吧,不多解释了
1
//
---------------------------------------------------------------------------
2
class
TFlea
//
跳蚤实现类
3
{
4
public
:
5
void
MakeSound()
//
只会叫我在这里
6
{
7
ShowMessage(
"
Flea Here:)
"
);
8
}
9
}
;
10
//
-------------------------------------------------------------------------
11
class
IDog
//
抽象类,狗
12
{
13
public
:
14
virtual
void
Barking()
=
0
;
//
所有的狗都会吠
15
}
;
16
//
-------------------------------------------------------------------------
17
class
THusky :
public
IDog
//
哈士奇实现类,从IDog继承
18
{
19
public
:
20
virtual
void
Barking()
21
{
22
ShowMessage(m_sName);
//
哈士奇会说自己的名字
23
}
24
public
:
25
THusky(String
&
sName)
//
每个哈士奇都有名字
26
{
27
m_Flea
=
new
TFlea();
//
生下来身上就有一只跳蚤
28
if
(NULL
==
m_Flea)
29
{
30
ShowMessage(
"
Create husky failed!
"
);
31
delete
this
;
32
}
33
m_sName
=
sName;
34
}
35
public
:
36
TFlea
*
m_Flea;
//
聚合了一只跳蚤
37
String m_sName;
//
名字
38
}
;
39
//
-------------------------------------------------------------------------
测试代码
1
private
:
2
vector
<
IDog
*>
m_vDogs;
//
测试类中的狗索引容器
1
m_vDogs.reserve(
20
);
2
//
创建10只狗
3
for
(unsigned
int
i
=
0
; i
<
10
; i
++
)
4
{
5
String sDogName
=
"
Husky:
"
+
(String)(i);
//
名字为其创建的序号
6
IDog
*
Dog
=
(IDog
*
)
new
THusky(sDogName);
7
if
(NULL
==
Dog)
8
{
9
String sInfo
=
sDogName
+
(String)(
"
Create Failed!
"
);
10
ShowMessage(sInfo);
11
}
12
m_vDogs.push_back(Dog);
13
}
1
//
查看第10只狗的名字,它在9号位
2
THusky
*
Husky
=
(THusky
*
)m_vDogs[
9
];
3
String sName
=
Husky
->
m_sName;
4
//
跳蚤还在不在
5
Husky
->
m_Flea
->
MakeSound();
运行结果显示:Flea Here
验证了结果是:指向子类对象的父类指针,在做DownCast时,不会因为自身是父类指针而使DownCast出的子类对象指针发生缺失,连一只虱子、跳蚤都不会少。
posted on 2008-09-20 11:22
创建更好的解决方案
阅读(1482)
评论(2)
编辑
收藏
引用
所属分类:
面向对象
、
C++专栏
、
理越辩越明
评论:
#
re: 狗,哈士奇,跳蚤,继承,聚合,UpCast和DownCast 2008-09-20 14:37 |
jef
不错啊,挺有创意.要是能出个全集就好了.
回复
更多评论
#
re: 狗,哈士奇,跳蚤,继承,聚合,UpCast和DownCast
2008-09-20 14:47 |
cexer
多重继承的时候,使用C风格的转换,可能会出乱子。
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
[初探Xerces系列]DOM Lev3 Core的关键特性整理
狗,哈士奇,跳蚤,继承,聚合,UpCast和DownCast
重构故事——Chapter03
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
本博客文章如无特别说明则为原创,转载请注明出处。
<
2008年1月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(7)
给我留言
查看公开留言
查看私人留言
随笔分类
C++专栏(20)
CPPUnit专栏(2)
E文全翻(2)
TDD(5)
UI美学(4)
XP敏捷(5)
克隆cn.msn.com Step by Step(4)
理越辩越明(5)
面向对象(3)
内存专题(1)
去年今日(1)
软件测试(6)
软件设计(14)
闲话连篇(6)
心路历程(4)
性能监测(1)
随笔档案
2010年2月 (1)
2009年6月 (2)
2009年5月 (4)
2009年2月 (1)
2009年1月 (1)
2008年10月 (1)
2008年9月 (2)
2008年8月 (4)
2008年7月 (3)
2008年6月 (1)
2008年4月 (5)
2008年3月 (3)
2008年2月 (1)
2008年1月 (4)
2007年12月 (4)
2007年10月 (2)
2007年9月 (1)
2007年8月 (2)
2007年5月 (2)
2006年10月 (3)
2006年9月 (9)
2006年8月 (4)
相册
UI Design
我的博器
HelloPDA.com
好玩上线
T恤吧
老好啦!
让项目管理落地生根
CTO必读
搜索
最新随笔
1. Visual Studio VS C++Builder07 不同的公司,同样的Bug
2. [初探Xerces系列]DTD
3. [初探Xerces系列]DOM Lev3 Core的关键特性整理
4. [初探Xerces系列]IDE之惑
5. [初探Xerces系列]对外提供CLI
6. [初探Xerces系列]目录结构也可以辅助提高代码可读性
7. [初探Xerces系列]xerces-c-3.0.1在CB07下编译不过的解决办法
8. 获取版本信息Version的完整代码(从msdn扩展而来)
9. 初始化const, static, const static, static const成员变量
10. 【zz】设计Qt风格的C++API
最新评论
1. re: UI美学
其实UI美学应该属于信息美学中的一类,因为UI本身是一种提供信息的平台,交互是属于信息的一个属性,因此他和infographic一样是一种信息美学.
--懵中人
2. re: [克隆cn.msn.com Step by Step]Multi Page
评论内容较长,点击标题查看
--MartinaHOLCOMB35
3. re: C++关键字:mutable、volatile、explicit以及__based
今天偶尔看到,讲的很透彻谢谢
--smileEvday
4. re: 初始化const, static, const static, static const成员变量
明显不对,const 成员变量需要在初始化列表中初始化,基础中的基础,以前一个腾讯的人面试我,他也不知道这个。
--pw
5. re: 我和充斥臭味代码的战争
这绝对是项目管理问题@abettor
--stepinto
阅读排行榜
1. C++关键字:mutable、volatile、explicit以及__based(12352)
2. 初始化const, static, const static, static const成员变量(6921)
3. 读懂常见IRP:IRP_MJ_CLEANUP\IRP_MJ_CLOSE\IRP_MJ_CREATE(5998)
4. 获取版本信息Version的完整代码(从msdn扩展而来)(5405)
5. 我是笨人——读Rob Pike的《Notes on C Programming 》(附全文链接)(4432)
评论排行榜
1. 我和充斥臭味代码的战争(26)
2. [克隆cn.msn.com Step by Step]Multi Page(10)
3. Visual Studio VS C++Builder07 不同的公司,同样的Bug(9)
4. 关于实战测试驱动开发的一点感想。(7)
5. UI美学(7)