最近我的一位朋友問我如何防止C++中的類繼承。他希望編輯失敗。防止C++中的類繼承
我在想它,找到3個答案。不確定哪一個是最好的。
1)私有構造(多個)
class CBase
{
public:
static CBase* CreateInstance()
{
CBase* b1 = new CBase();
return b1;
}
private:
CBase() { }
CBase(CBase3) { }
CBase& operator=(CBase&) { }
};
2)使用CSealed基類,私有構造函數&虛擬繼承
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類不能被繼承。 我的問題是:
1)哪種方法最好?還有其他方法嗎?
2)方法2 & 3將不起作用,除非CSealed類被虛構地繼承。這是爲什麼 ?它與vdisp ptr有什麼關係?
PS:
上述程序是在MS C++編譯器(Visual Studio中)編譯。 參考:http://www.codeguru.com/forum/archive/index.php/t-321146.html
向混合中添加一個宏並不能使它成爲一個新的解決方案。 – 2014-09-04 21:22:51