假設有一種用於防止從派生類的一些正當的理由下去,Bjarne的給出瞭解決方案here的答案,「我能阻止人們從我的類派生?」簡單的「防止派生類」,在C++
但是,我認爲:
class final {
protected:
final() { } // line 3
};
class B : private virtual final {
};
class D : public B { // line 9
};
int main() {
B b;
D d; // line 14
}
當嘗試編譯,得到:
foo.cpp: In constructor ‘D::D()’:
foo.cpp:3: error: ‘final::final()’ is protected
foo.cpp:9: error: within this context
foo.cpp: In function ‘int main()’:
foo.cpp:14: note: synthesized method ‘D::D()’ first required here
我是否對所有情況的解決方案的工作?恕我直言,這是更好的,因爲類final
是通用的,並不需要預先知道類阻止派生。
不是所有構造函數是在解決方案中私人!您忘記了由編譯器公共複製構造函數自動生成的內容。讓它也是私人的。你可以使用'seal'的公共拷貝構造函數來破解你的解決方案!我準備了類似C++ 03問題的答案:請參閱http://stackoverflow.com/a/12139218/1463922。 –
PiotrNycz
2012-08-27 09:22:26