【发布时间】:2011-01-12 03:38:06
【问题描述】:
最近我的一位朋友问我如何防止 C++ 中的类继承。他希望编译失败。
我想了想,找到了 3 个答案。不知道哪个是最好的。
1) 私有构造函数
class CBase
{
public:
static CBase* CreateInstance()
{
CBase* b1 = new CBase();
return b1;
}
private:
CBase() { }
CBase(CBase3) { }
CBase& operator=(CBase&) { }
};
2) 使用 CSealed 基类、私有 ctor 和虚拟继承
class CSealed
{
private:
CSealed() {
}
friend class CBase;
};
class CBase : virtual CSealed
{
public:
CBase() {
}
};
3) 使用CSealed 基类、受保护的ctor 和虚拟继承
class CSealed
{
protected:
CSealed() {
}
};
class CBase : virtual CSealed
{
public:
CBase() {
}
};
以上所有方法确保CBase类不能被进一步继承。
我的问题是:
-
哪种方法最好?还有其他方法吗?
-
除非
CSealed类被虚拟继承,否则方法2 和3 将不起作用。这是为什么 ?和vdisp ptr有关系吗??
PS:
上述程序是在 MS C++ 编译器 (Visual Studio) 中编译的。 参考:http://www.codeguru.com/forum/archive/index.php/t-321146.html
【问题讨论】:
标签: c++ inheritance controls