只有有耐心圆满完成简单工作的人,才能够轻而易举地完成困难的事。
Only those who have the patience to do simple things perfectly ever acquire the skill to do difficult things easily.
C++博客
首页
新随笔
联系
聚合
管理
随笔-60 评论-90 文章-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
创建更好的解决方案
阅读(1135)
评论(2)
编辑
收藏
引用
所属分类:
面向对象
、
C++专栏
、
理越辩越明
评论:
#
re: 狗,哈士奇,跳蚤,继承,聚合,UpCast和DownCast 2008-09-20 14:37 |
jef
不错啊,挺有创意.要是能出个全集就好了.
回复
更多评论
#
re: 狗,哈士奇,跳蚤,继承,聚合,UpCast和DownCast
2008-09-20 14:47 |
cexer
多重继承的时候,使用C风格的转换,可能会出乱子。
回复
更多评论
刷新评论列表
IT新闻:
·
谷歌“身后事”:屏蔽.com不只是个传说?
·
腾讯今年招聘近3000人 员工总数将突破1万人
·
中国互联网江湖一窥:IT第一记者刘韧入狱记
·
9大IT科技公司总部览
·
五个广泛流传的对大龄程序员的误解
专题:
Android
iPad
jQuery
Chrome OS
博客园首页
IT新闻
知识库
学英语
C++程序员招聘
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
每天10分钟,轻松学英语
推荐职位:
·
飞信服务器端高级.NET开发工程师(新媒传信)
·
.NET飞信官网开发工程师(新媒传信)
·
.NET技术开发总监(广州衣酷)
·
ASP.NET资深工程师 (盛大网络)
·
.NET初级程序员 (北京安人)
·
.NET中级程序员 (北京安人)
·
中高级.NET工程师(沪江网)
·
前端开发工程师(沪江网)
博客园首页随笔:
·
Visual Studio 2010 Ultimate测试体系结构
·
技术、业务、市场
·
在工作组中安装和配置Hyper-V R2
·
Windows 7库(Library):C#快速参考
·
四本与携程有关的书
知识库:
·
五个广泛流传的对大龄程序员的误解
·
有感于“研发人员的个人培养和组织培养”
·
SQL vs NoSQL:数据库并发写入性能比拼
·
让敏捷与“以用户为中心的设计”和谐共生
·
Apple、Google 之战渐显个人色彩
相关文章:
[初探Xerces系列]DOM Lev3 Core的关键特性整理
狗,哈士奇,跳蚤,继承,聚合,UpCast和DownCast
重构故事——Chapter03
网站导航:
博客园
IT新闻
博客园个人主页
BlogJava
博客生活
IT博客网
PHP博客
博客园社区
管理
本博客文章如无特别说明则为原创,转载请注明出处。
<
2008年9月
>
日
一
二
三
四
五
六
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
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
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: Visual Studio VS C++Builder07 不同的公司,同样的Bug
@创建更好的解决方案
当然不一样了。
至于int和unsigned int范围可以参见limits.h
里面有INT_MIN,INT_MAX和UINT_MAX
--试试其他的
2. re: Visual Studio VS C++Builder07 不同的公司,同样的Bug
爱上的卡就是觉得
--喜乐递官方网站
3. re: Visual Studio VS C++Builder07 不同的公司,同样的Bug
@试试其他的
int和unsigned int表达范围一样吗?
--创建更好的解决方案
4. re: Visual Studio VS C++Builder07 不同的公司,同样的Bug
评论内容较长,点击标题查看
--试试其他的
5. re: Visual Studio VS C++Builder07 不同的公司,同样的Bug
@clear
2*1024*1024*1024,距离32位溢出,还有50步呢
--创建更好的解决方案
阅读排行榜
1. C++关键字:mutable、volatile、explicit以及__based(3532)
2. 初始化const, static, const static, static const成员变量(2821)
3. 读懂常见IRP:IRP_MJ_CLEANUP\IRP_MJ_CLOSE\IRP_MJ_CREATE(2083)
4. 我是笨人——读Rob Pike的《Notes on C Programming 》(附全文链接)(1831)
5. 用CPPUnit做单元测试(原文在E文全翻中)(1657)
评论排行榜
1. 我和充斥臭味代码的战争(24)
2. Visual Studio VS C++Builder07 不同的公司,同样的Bug(9)
3. 关于实战测试驱动开发的一点感想。(7)
4. 好文如风,拂去数朵疑云——Designing Qt-Style C++ APIs by Matthias Ettrich (6)
5. UI美学(6)