最近,我的一个朋友问我如何在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
类,否则
PS:
上述程序是在MS C++编译器(Visual Studio)中编译的。参考:http://www.codeguru.com/forum/archive/index.php/t-321146.html
https://stackoverflow.com/questions/2184133
复制相似问题