C++热身系列二[原创于百合]
来源:互联网 发布:java字符编码 编辑:程序博客网 时间:2024/04/30 04:17
[本篇全文] [回复本文] [本篇作者: pennyliang] [本篇人气: 123] 0
发信人: pennyliang (世界很美好,值得去奋斗), 信区: CPlusPlus
标 题: 一句话说出下列代码执行结果,热身系列2
发信站: 南京大学小百合站 (Thu Nov 9 14:22:04 2006)
class A
{
virtual void test(char* s)
{
printf("A:the str is s%",s);
}
A(char* s)
{
test(s);
}
}
class B:public A
{
virtual void test(char* s)
{
printf("B:the str is s%",s);
}
B(char *s):A(s)
{
}
}
void main(void)
{
B test("test");
}
给出结果,并说明原因
--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 202.106.180.62]
[本篇全文] [回复本文] [本篇作者: wxy101] [本篇人气: 39] 1
发信人: wxy101 (【风起西南·巴渝人家】), 信区: CPlusPlus
标 题: Re: 一句话说出下列代码执行结果,热身系列2
发信站: 南京大学小百合站 (Thu Nov 9 16:15:15 2006)
A:the str is test.
调用A的构造函数时,B还没构造完成.所以不可能调用B的test函数,即使是virtual.
菜鸟想法,不知道对不?
--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 218.94.9.35]
[本篇全文] [回复本文] [本篇作者: pennyliang] [本篇人气: 37] 2
发信人: pennyliang (世界很美好,值得去奋斗), 信区: CPlusPlus
标 题: Re: 一句话说出下列代码执行结果,热身系列2
发信站: 南京大学小百合站 (Thu Nov 9 16:17:57 2006)
回答正确,你觉得这个问题怎么改可以实现调用到B呢,而且我不希望增加一个类成员变量
来保留s,也就是在构造的时候就要输出 B的这一串数呢?
--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 202.106.180.62]
[本篇全文] [回复本文] [本篇作者: wxy101] [本篇人气: 34] 3
发信人: wxy101 (【风起西南·巴渝人家】), 信区: CPlusPlus
标 题: Re: 一句话说出下列代码执行结果,热身系列2
发信站: 南京大学小百合站 (Thu Nov 9 16:32:52 2006)
给A提供一个空的默认构造函数,
B的构造函数就不要用初始化列表了,
在B的构造函数体内调用?
--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn [FROM: 218.94.9.35]
[本篇全文] [回复本文] [本篇作者: pennyliang] [本篇人气: 36] 4
发信人: pennyliang (世界很美好,值得去奋斗), 信区: CPlusPlus
标 题: Re: 一句话说出下列代码执行结果,热身系列2
发信站: 南京大学小百合站 (Thu Nov 9 16:41:38 2006)
你已经答对了,我再总结一下
通常在构造函数调用虚函数,是很危险的,原因和你说的一样,在其作基类被构造的时候
,由于子类还没有构造完,基类没法反调到子类的代码上去。
如果一定要在构造的时候完成这种反调,就只能在基类把构造函数改为一个普通虚函数,
然后子类实现这个虚函数,在子类构造函数中主动调用这个虚函数,于是就调用子类的这
个函数了。
在我们应用template模式或者也有说是algroithm skeleton模式的时候,最容易犯这种错
误,有些时候是致命的,特别是如果子类和基类做很相似的工作的时候,排错都非常困难
。
- C++热身系列二[原创于百合]
- C++热身系列一[原创于百合]
- C++热身系列三[原创于百合]
- [热身题][hdoj_2042]不容易系列之二
- 百合
- RxAndroid热身系列(一)
- RxAndroid热身系列--什么是Rx
- 范型编程系列二(非原创)
- 【原创】技术系列之 状态机(二)
- GCC for C 热热身
- 养生系列 之 百合莲子豆浆的做法
- UML复习系列之二(工具使用)【原创】
- [原创]《让我们一起CCNA吧》 系列文章二:网络协议
- 原创 征文系列二 我爱《动物世界》
- 原创253页图文并茂电子书:深入浅出系列之二_Subversion
- 【原创】技术系列之 网络模型(二)
- [原创]HandlerSocket系列(二):架构、特点及其应用场景
- 【原创】技术系列之 网络模型(二)
- 学习笔记(一)
- hack入门教程——53集wmv(迅雷下载)
- ASP.NET AJAX注意要点3
- IE与Firefox的HTC
- C++热身系列一[原创于百合]
- C++热身系列二[原创于百合]
- C++热身系列三[原创于百合]
- 常用Firefox插件
- google专利2则
- 求结构长度笔试题的分析。
- 天道酬勤
- 11月12日-----12月12日的短期学习计划
- 把DamnSmallLinux(DSL)安装到硬盘(虚拟机)并安装GCC
- 不眠的硅谷