• 全部
  • 问答

请教:如何防止一个类被其他类继承,类似JAVA中的final修饰符

qfsb_p 2003-05-30 11:04:27
我现在想到的方法有如下几种,但是效果不太理想,请求大家帮忙!
方法一:利用私有构造函数,然后提供public的方法创建对象或者设定友元。
方法二:利用类的嵌套(私有的子类)。

在下抛砖!
...全文
107 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hookuy 2003-07-07
实现final类(不允许被派生)

namespace Private{
class NonDerivableHelper
{
NonDerivableHelper() {}
friend class NonDerivable;
};
}
#ifdef NDEBUG
#define FINAL_CLASS
#else
#define FINAL_CLASS : private virtual Private::NonDerivableHelper
#endif
class NonDerivable FINAL_CLASS
{
...
};

回复
yic_sword 2003-07-04
搞不懂!sealed修饰符不就是用来防止继承的吗?
回复
qfsb_p 2003-05-30
这两个办法都是从方法一级上进行控制,但是我是想有没有一种办法可以从类的级别上来处理,也就是和java类似的解决思路
回复
耙子 2003-05-30
第一个方法应该查差不多。
回复
zxi666 2003-05-30
你的第一种方法为什么说效果不理想?
回复
Zark 2003-05-30
写成COM组件,除使用aggregate方法,是无法继承的.(大多数人认为aggregate不是继承).
回复
genewujing 2003-05-30
看一下effective c++上面有介绍!
回复
pzytony 2003-05-30

up
up
回复
liubear 2003-05-30
不好办,帮你UP
回复
qfsb_p 2003-05-30
刚才没有留意,现在仔细想了想,确实有道理,谢谢!
回复
yizhenfeng 2003-05-30

呵呵,

多谢liu_feng_fly(笑看风云 搏击苍穹 衔日月) 的认可!

回复
liu_feng_fly 2003-05-30
to qfsb_p:
yizhenfeng的方法是很好的,比你提出的解决方法高明很多,而不是差不多呀
回复
qfsb_p 2003-05-30
yizhenfeng(一阵风) 和Eagle_118(语夜) 的方法实际和我列出来的差不多,还有没有更好的方案?

5:30结帖!
回复
Eagle_118 2003-05-30
一种不是很常用的方法:函数中的类是不能继承的
void func()
{
class FinalClass{};
}
回复
yizhenfeng 2003-05-30
见C++ View第一期:

实现final类(不允许被派生)

namespace Private{
class NonDerivableHelper
{
NonDerivableHelper() {}
friend class NonDerivable;
};
}
#ifdef NDEBUG
#define FINAL_CLASS
#else
#define FINAL_CLASS : private virtual Private::NonDerivableHelper
#endif
class NonDerivable FINAL_CLASS
{
...
};

实现的很漂亮。

回复
相关推荐
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2003-05-30 11:04
社区公告
暂无公告