Mephisto_76(湮没骑士) ,你的方法(定义一个不能被继承的类B)还没有说完,我来补全:)——
定义:
class B
{
private:
B()
{
}
friend class A;
};
将导致B无法被除A以外的其它任何class直接继承以后实例化,也就是说,在上面这个定义的基础上,如果你在定义:
class C:public B{};
将导致编译能够通过,但是无法实例化C(那当然也没用了,所以间接实现了一个无法继承的类B),但是因为A是B的友元,所以能够进入B的private区域,所以如果定义:
class A:public B{};
能够实例化A.
但是这样定义还有一个漏洞,如果在A普通public继承B的基础上再定义:
class D:public A{};
你会发现D也是可以实例化的,那么相当于间接public继承了B。这显然不是我们想要的,所以,正确的做法是(完整代码):
class A;
class B
{
private:
B()
{
}
friend class A;
};
class A:virtual public B{}; //A is the one we're looking for