C++ view第一期中给出了如何实现一个不能被继承的类的方法。
如下:
#ifdef NDEBUG
#define FINAL_CLASS
#else
#define FINAL_CLASS : public virtual Private::NonDerivableHelper //这里的关键是virtual 只要是virtual就不能继承
#endif
namespace Private
{
class NonDerivableHelper
{
protected:
NonDerivableHelper(int) { cout << "a" << endl;} //ADDED CTOR ARGUMENT
};
}
class NonDerivable FINAL_CLASS
{
public:
NonDerivable() : NonDerivableHelper(0) {cout << "b" << endl;} //PASS A DUMMY VALUE
};
class A: public NonDerivable
{
public:
A() { cout << "c" << endl;}
};
int main(int argc, char *argv[])
{
NonDerivable n;
A a;
return 0;
}
这里A试图继承 NonDerivable 类,但是编译器会报