有没有办法写一个类,以便没有类可以从它继承?

时间:2010-10-15 02:42:43

标签: c++ visual-studio-2008

来自链接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'类中声明的私有成员

所以继承它允许但实例化它不允许。

还有其他阻止继承的方法吗?

2 个答案:

答案 0 :(得分:0)

不通过显式关键字。有些语言有一个“密封”的关键字,或类似的,完全相同,但不是C ++。

可以这样做(看看来自liaK的有用评论),但它真的很尴尬,你必须有一个非常好的理由想要这样做。

答案 1 :(得分:0)

Java中的final关键字或C ++中的sealed没有等价物。你当然可以通过使类构造函数变为私有来阻止继承,或者通过跟随liaK的链接并使类子类具有私有构造函数并且是它的朋友。

一般情况下:

你可以让你的析构函数非虚拟地表示你不打算让这个类具有多态性,并记录这是你的意图。当然,如果你班级的用户决定忽略这一点,他们可能会因为傲慢而遇到自己的问题。 ;)

另外:http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.11