c++ - 有什么方法可以编写一个类,使得不能从它继承任何类?

标签 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;
}

然后报错

error C2248: 'A::A' : cannot access private member declared in class 'A'

因此允许继承但不允许实例化。

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

最佳答案

Java 中的 final 关键字或 C++ 中的 C♯ 的 sealed 没有等价物。您当然可以通过将类构造函数设为私有(private)来防止继承,或者通过跟随 liaK 的链接并让一个类子类化一个具有私有(private)构造函数并且是它的 friend 的类。

一般而言:

您可以将析构函数设置为非虚拟的,以表示您不打算让该类成为多态的,并记录这是您的意图。当然,如果你类(class)的用户决定忽略这一点,他们可能会因为他们的狂妄自大而遇到他们自己的问题。 ;)

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

关于c++ - 有什么方法可以编写一个类,使得不能从它继承任何类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3939111/

相关文章:

visual-studio-2008 - 如何从QTableWidget获取数据?

visual-studio-2008 - DebuggerDisplay 属性未按预期工作

c++ auto 不命名类型

c++ - 复制构造函数不被继承

c++ - 特征:稀疏矩阵 pruned() 不会删除低于阈值的条目

c++ - 如何将我的程序转换为使用 C++ 命名空间?

visual-studio-2008 - 使用Visual Studio 2008和2010进行一个ASP.NET-MVC-2项目?

c++ - "+ +"运算符的含义(非++)

c++ - 将 PySide 对象传递给 C++

winforms - 如何在Windows窗体应用程序中嵌入SQLite?