代码之家  ›  专栏  ›  技术社区  ›  bjskishore123

有没有办法写一个类,这样就没有类可以从中继承?

  •  1
  • bjskishore123  · 技术社区  · 15 年前

    从链接 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”:无法访问

    所以继承是允许的,而实例化是不允许的。

    有没有其他方法阻止继承本身?

    2 回复  |  直到 15 年前
        1
  •  0
  •   wkl    15 年前

    没有比 final Java或C中的关键字 sealed 在C++中。当然,您可以通过使类构造函数成为私有的,或者遵循liaK的链接并让类子类成为具有私有构造函数并且是其朋友的类来防止继承。

    一般来说:

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

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

        2
  •  0
  •   Spike    15 年前

    不通过显式关键字。有些语言有一个“密封”关键字,或者类似的,确实如此,但不是C++。

    这是可以做到的(看liaK的有用评论),但这真的很尴尬,你必须有一个很好的理由去做。