社区
C#
帖子详情
一道笔试题求解
effun
2007-06-22 08:42:46
程序中有一个虚基类B,有许多由B派生的类D1~Dn。在B中有一个方法,其作用是创建一个当前对象的副本。那么,在外部代码调用D1~Dn的此方法时,应该如何创建具体派生类的实例?请综合考虑效率和可扩展性。
...全文
316
6
打赏
收藏
一道笔试题求解
程序中有一个虚基类B,有许多由B派生的类D1~Dn。在B中有一个方法,其作用是创建一个当前对象的副本。那么,在外部代码调用D1~Dn的此方法时,应该如何创建具体派生类的实例?请综合考虑效率和可扩展性。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
effun
2007-06-28
打赏
举报
回复
真的没人能理解吗?我还以为是我的资质太低了,庆幸一下。
dreamsnake
2007-06-22
打赏
举报
回复
因为我自认对这道题理解的基础和简单,我有点儿怀疑,是真的太基础简单了,还是自己的水平不够.
不过,还是说说我的理解,看看有没有高手帮我指正提高一下.呵呵.
我的答案: 首先,在虚方法定义上,肯定返回的是B类对象.所以,首先在子类中实现的些方法返回值也就是一个B类型的子类实例喽.所以,当然需要做一个向子类型的强制转换喽.
我能想到的方法好象也就只有这一种而已吧. 因为题里是问 "在外部代码调用D1~Dn的此方法时,应该如何创建具体派生类的实例?" . 我怎么想也只是觉得重点可能在于如何定义虚方法上吧.或者问问子类如何重写该方法. 现在问的是如何调用,不太明白考点和用意.
worms8888
2007-06-22
打赏
举报
回复
学习~
aSalt
2007-06-22
打赏
举报
回复
在外部代码调用D1~Dn的此方法时,应该如何创建具体派生类的实例?
--------------------------------------------------------------
直接 D1 d1=new D1(); 就成了,或者我没懂你的意思, 派生类继承了基类的方法 d1.方法();
effun
2007-06-22
打赏
举报
回复
我觉得,按题目的意思应该是做一个类似于Clone的方法。如果是这样的话,这个方法应该分成两个部分,一是创建一个新的实例,二是如何把当前对象的值Copy给新的对象。从题目的重点来看,主要就是第一部分,也就是如何创建一个新的实例。
因为B是一个虚类,因此不能实例化,那么要在B的Clone方法里直接创建一个当前类型的新实例就无从下手了,在我印象里C#是不能在基类直接调用当前派生类的构造函数的,除非已知类型。如果一定要使用这种方式,那就只有通过许多if来判断了,比如:
B newObj;
if (this.GetType() == typeof(D1))
newObj = new D1();
else if (this.GetType == typeof(D2))
newObj = new D2();
....
但这种方式就失去了可扩展性,并且在实际运用中也是不现实的。
还有一种办法就是通过反射来创建新实例,这样虽然保证了程序的可扩展性,但会使效率大打折扣。
想了很久,最终还是想到了两种办法来解决:
第一种办法是在B类中添加一个虚方法,在此方法中通过反射来创建新的实例。那么,为了解决效率的问题,派生类可重写这个虚方法,直接用new一个当前类型的实例即可。
第二种办法是把Clone方法改为泛型方法,并要求所提供的泛型类型必须为B的派生类并且具有默认的构造函数。
不知道我的思路对不对,希望大家一起来讨论一下。
LoveSunny_996
2007-06-22
打赏
举报
回复
B d = new D1();
d.方法()
erp系统管理员考试习题
笔试(erp系统管理员)题目
求解
偶乃一应届毕业生,上星期在网上见到一不错的公司招oracle数据库管理,于是屁颠屁颠跑到那公司,骗过门卫和保安,咨询了搞卫生的阿姨后,见到了人力资源部主管,话都没说上两句,给偶
一道
题目(erp系统管理员),结果没几个会做的。其实我自己也挺想往erp方向发展,所以打算下个星期再去。 请各位大虾们帮帮忙忙,提点提点。(我在论坛上查了些,资料,还是有好多不会的。) 1。列出 erp供应商及erp产品的名称,版本? (erp供应商是不是:racle erp在咱国内的用户比如,华菱、湘钢、衡钢、承 钢、济钢等等。名称和版本呢?) 2。名词解释 erp,crm,hr,oa,srm,pdm (我只查到了erp,crm,hr的解释,其他的查不到) 3。用一句话说明 bom,采购计划,生产订单,销售订单,物料清单 (查不到 ) 4。写sql语句。 ‘存货档案’(表一): 存货编码(c),存货名称(c),存货规格(c),存货类别(c) ‘发货单’(表二):存货编码(c),数量(n),单价(n) 用sql写出 A:存货类别为'办公用品',发货金额在1000元以下的所有发货单 B: 按存货名称汇总发货单的发货金额 (此题会做一点点,但是写得不全,还得请大家指导) 5 写出erp系统对'销售发货单',‘销售普通发票’生成的会计分录 (完全摸不着头脑)
常见:某笔试附加题解法1
刚进博客园就在《
一道
面试附加题的另类
求解
》看到
一道
有趣的题,正好,偶对这题也有一些想法,因此写来分享下。先将forward和backward数组的值算出,然后才
2021华为 HCIE 数通 LAB 题库 版本 视频 讲解赠
笔试题
库
本课程可以帮助大家顺利通过HCIE数通方向 LAB考试,LAB版本解法视频配套讲解,讲解细致,通俗易懂,资料完整,可以... 课程课件附件中包含赠送的HCIE
笔试题
库、LAB拓扑解法、TS拓扑解法、TAC解法,适合自学备考HCIE LAB
一道
笔试题
,
求解
#include #include #include using namespace std; struct A { A(const char* str) { static A a="hello"; printf("[%s]",str); } A& operator=(const char* str) {
《校招大厂中等难度
笔试题
》纯C语言
求解
迷宫问题——进来测测你数据结构初阶学的怎么样?
今天我为大家带来了
一道
校招中大厂中等难度的
笔试题
,让大家感受一下校招大厂的
笔试题
难度是怎样的!
C#
110,536
社区成员
642,578
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章