免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5815 | 回复: 14
打印 上一主题 下一主题

[C++] 如何用C++设计一个不能被继承的类? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-25 23:58 |只看该作者 |倒序浏览
如何用C++设计一个不能被继承的类?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
2 [报告]
发表于 2012-09-26 00:10 |只看该作者
本帖最后由 starwing83 于 2012-09-26 00:12 编辑

class I_Can_Not_Be_Inherited final {
  ...
};

PS: C++11

论坛徽章:
0
3 [报告]
发表于 2012-09-26 00:13 |只看该作者
本帖最后由 边学CPP边骂CPP 于 2012-09-26 00:15 编辑

回复 2# starwing83

严肃点,这是一个面试题。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
4 [报告]
发表于 2012-09-26 00:20 |只看该作者
回复 3# 边学CPP边骂CPP


    面试会问到这个题目的,可想而知他们的C++代码已经混乱到了什么程度了…………

我的观点是:一个类,既然设计出来,就应该尽可能地满足对方任意的使用方式。如果不允许被继承,直接声明虚构函数为非virtual即可,大家绝对心领神会,犯得着用各种奇技淫巧让别人看着一堆编译错误抓脑袋么…………

但是,在C++里面,一个类的使用方式实在是太多太多了,多到了一个人几乎没法完全顾及到的程度。这意味着,即使仅仅让这个类满足最基本的使用要求,你在这个类本身(而不是它的实现)上花下的功夫,就已经比去实现这个类要大很多了。也许在某些情况下这是有意义的,但是我已经不止一次看到,我刚刚设计完一个接口的时候,人家已经用C在写测试样例并且调试出第一个Bug了……

这就是为什么我不用C++的原因。

论坛徽章:
0
5 [报告]
发表于 2012-09-26 00:58 |只看该作者
如果要从语法语义上禁止,那就把所有构造函数声明为private,用static成员或friend去构造。

不推荐做这么绝,绝人之路,绝己之路。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
6 [报告]
发表于 2012-09-26 12:27 |只看该作者
构造函数私有, 提供public static的工厂函数即可.

论坛徽章:
0
7 [报告]
发表于 2012-09-26 13:53 |只看该作者
边学CPP边骂CPP 发表于 2012-09-26 00:13
回复 2# starwing83

严肃点,这是一个面试题。


这个面试还有一句: 并且能够正常使用的类

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
8 [报告]
发表于 2012-09-26 14:11 |只看该作者
奇怪的想法啊,难道他们使用类的方式都不一样吗?

论坛徽章:
0
9 [报告]
发表于 2012-09-26 17:13 |只看该作者
变态呀                 

论坛徽章:
0
10 [报告]
发表于 2012-09-26 17:14 |只看该作者
如何用C设计一个不能被继承的类?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP