方法有一下两种:
1、将类后面加一个final关键字,最简单;
2、利用私有构造函数,然后提供public的方法创建对象或者设定友元。
重点说说方法2:
(1)将构造函数设为私有,提供public方法进行对象的创建,利用的是单例模式。
(2) 将构造函数设为私有,通过设定友元来进行创建对象,其友元类为子类,所以在创建对象时,需要调用父类的构造函数,因为是友元,所以可以创建对象。但B就不行,因为友元A只针对该一个类Usable_lock有效,对其他类或派生类(B)均无效,代码如下:
class A;
class Usable_lock{
friend class A;
private:
Usable_lock(){};
Usable_lock(const Usable_lock){};
};
//Usable_lock为一个辅助实现的类
class A: public virtual Usable_lock{
public:
A();
};
class B: public A
{
};
A a; //可以正常定义对象
B b; //error,... 派生类不可以定义对象。。。