来自链接http://www.coolinterview.com/interview/10842/
有没有办法编写一个类,以便不能从它继承任何类?
根据上述链接中的建议,我尝试了下面的代码
class A
{
A(){}
~A(){}
A(const A&);
A& operator=(const A&);
};
class B: public A
{
};
上面的代码不会产生任何错误。 如果我尝试实例化B,如下所示
int main()
{
B ob;
}
然后它给出了错误
错误C2248:'A :: A':无法访问 在'A'类中声明的私有成员
所以继承它允许但实例化它不允许。
还有其他阻止继承的方法吗?
答案 0 :(得分:0)
不通过显式关键字。有些语言有一个“密封”的关键字,或类似的,完全相同,但不是C ++。
可以这样做(看看来自liaK的有用评论),但它真的很尴尬,你必须有一个非常好的理由想要这样做。
答案 1 :(得分:0)
Java中的final
关键字或C ++中的sealed
没有等价物。你当然可以通过使类构造函数变为私有来阻止继承,或者通过跟随liaK的链接并使类子类具有私有构造函数并且是它的朋友。
一般情况下:
你可以让你的析构函数非虚拟地表示你不打算让这个类具有多态性,并记录这是你的意图。当然,如果你班级的用户决定忽略这一点,他们可能会因为傲慢而遇到自己的问题。 ;)
另外:http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.11