C++中如何让一个类不能被继承

原创 2004年06月24日 10:22:00

[C++实现Sealed类]

今天看到《软件研发5》有一篇译自CUJ的文章“使类不可继承”,方法很好,但有几个毛病:
1.  正如译者说的,还是有办法进行继承,虽然方法有点变态
2.  最主要的毛病却是,这种办法会造成运行时的开销。因为至少会增加VTABLE指针。

所以,针对以上两个问题,作了改动,如下:

#ifdef _DEBUG
namespace internalSealed
{
        template<typename T>
        class Class_Is_Sealed
        {
        protected:
                Class_Is_Sealed(){};
        };
};

template<typename T>
class Sealed: private virtual internalSealed::Class_Is_Sealed<T>
{
        friend typename T;
};

#else

template<typename T>
class Sealed
{
};

#endif

这样子,在Debug方式下,只要一个类从Sealed<T>继承,就不可再被继承了。
同时,在Release方式下,因为不再检查是否可以被继承,因而不产生开销(空类会被编译器优化掉)。

使用例子:
#include "Sealed.h"

class test: Sealed<test>
{
public:
        int print()
        {
                return 1;
        }
};

class ttt: public test //, Sealed<test>, Sealed<ttt>
{
public:
        int print()
        {
                return 2;
        }
};

int main(int argc, char* argv[])
{
        test t;
        printf("%d/n", t.print());

        ttt t1;   // 编译错误
        printf("%d/n", t1.print());  

        return 0;
}

如何让一个类不能被继承

要想让一个类不能被继承,已知方法有两种。一是,将类的构造函数定义为带private属性。二是,将该类虚继承一个父类,但是该父类的构造函数是带private属性的。 关于第二个方法可行的依据是: 1...
  • CHIERYU
  • CHIERYU
  • 2015年12月03日 11:56
  • 1710

对C++继承,封装,多态的理解

C++用了一段时间,感觉对C++慢慢的有了一点了解,在这和大家分享一下。 C++是一款面向对象的语言,拥有面向对象语言的三大核心特性:继承,封装,多态。每一个特性的良好理解与使用都会为我们的编程带来莫...
  • u011675242
  • u011675242
  • 2013年08月29日 17:38
  • 2399

C++ 编译,运行过程 详解。

要更深入了解C++, 必须要知道一个程序从开始到结束都干了些什么, 怎么干的。 所以我从C++编译到运行过程,解析下程序是怎么跑的。         首先,初略的说一下之前C++的编译过程,C++编...
  • yinzhuo1
  • yinzhuo1
  • 2015年07月26日 17:14
  • 12486

C++实现一个不能被继承的类

java中有一种类不能被继承,那就是final类.而C++中没有final类。       C++要实现一个不能被继承的类有很多方法. 主要的思路就是使子类不能构造父类的部分,这样子类就没有办法实例...
  • xlf13872135090
  • xlf13872135090
  • 2015年02月06日 13:15
  • 596

C++ 创建一个不能被继承的类

一、分析 在Java中定义了关键字final,被final修饰的类不能被继承。但在C++中没有final这个关键字。 首先想到的是在C++ 中,子类的构造函数会自动...
  • u013192061
  • u013192061
  • 2015年03月18日 15:24
  • 353

C++中禁止类被继承的方法

学过C++,看过一些C++书籍的人一般都知道怎么防止一个类被构造初始化,被赋值等等,它们的思想都一样,就是把相应的操作放到private区域中。现在,给大家介绍一种防止一个类被继承的方法,很巧妙~~要...
  • renwotao2009
  • renwotao2009
  • 2011年07月11日 00:24
  • 4332

C++之单继承

单继承定义:从一个基类中派生的继承称为单继承。也可以说,单继承的派生类只有一个基类。在单继承中,一个基类可以生成多个派生类,但是每个派生类只有一个基类。       单继承派生类的定义格式:   ...
  • erlian1992
  • erlian1992
  • 2015年03月09日 20:52
  • 1050

在c++中如何阻止类被继承

这个话题是源自于一个面试题,我在网上查了一下有不少这方面的解说!我自己整理了一下,选择了一个自认为是最优方案! 我们从最简单的开始: 首先,大家都知道要阻止类被实例化,可以通过使用private ...
  • yu12345678900
  • yu12345678900
  • 2014年11月22日 17:33
  • 825

c++类防止被继承的一种方法

熟悉c++和java的人都知道,java中的类如果不想被继承,可以在类的前面加final关键字,这样这个类就不能被继承了,而c++中没有这个关键字,那如何防止一个类被继承呢?...
  • richerg85
  • richerg85
  • 2014年01月13日 15:31
  • 2116

C++11

转自 https://zh.wikipedia.org/wiki/C%2B%2B11 C++11,先前被称作C++0x,即ISO/IEC 14882:2011,是目前的C++编程语言的正式标准...
  • arau_sh
  • arau_sh
  • 2013年05月08日 21:20
  • 1237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中如何让一个类不能被继承
举报原因:
原因补充:

(最多只允许输入30个字)