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

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

在下抛砖!
...全文
215 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
{
...
};

实现的很漂亮。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧