#ifndef __DT_MAIN_INHERITED_TYPE_H__
#define __DT_MAIN_INHERITED_TYPE_H__
#ifdef MakeFinal
#undef MakeFinal
#endif
#define MakeFinal
namespace DynamicTarget
{
//-->可被继承对象
//-->一个对象可被继承应该有虚析构函数
class CanBeInherited
{
public:
virtual ~CanBeInherited(){}
};
//-->构建不可继承的类,如果其类A继承了该类,那么类A不能再次被继承
template<class T>
class CMakeFinal
{
friend T;
private:
CMakeFinal(){}
virtual ~CMakeFinal(){}
};
/**
* 类A是不可继承的类,因为类A的子类无法调用CMakeFinal的构造函数和析构函数
* 如果不够建类B对象,那么编译不会发生错误
* class A : public CMakeFinal<A>
* {
* };
* class B :public A
* {
* };
*
* int main()
* {
* A* a = new A; // OK
* A* b = new B; // Error
* return 0;
* }
**/
}
#endif