相关推荐
-
C++ 中的 ‘ref‘ 和 ‘sealed‘ 关键字是什么?
表示托管类型,复制或传参的时候,仅仅复制或传递引用,不做拷贝,对比与value class类型;表示该类不能被继承,不能派生子类。
-
C++ 中不能被继承的类实现,及从中体现virtual 继承的一个特性
C++ view第一期中给出了如何实现一个不能被继承的类的方法。 如下: #ifdef NDEBUG#define FINAL_CLASS#else#define FINAL_CLASS : public virtual Private::NonDerivableHelper //这里的关键是virtual 只要是virtual就不能继承#endifnamespace Private{ c...
-
C++笔记---继承(下)
要实现无法被继承的类有两种方式:C++98及其之前:将父类的构造函数设置为private成员。C++11及其之后:使用final关键字修饰父类。将构造函数设置为private是因为:子类的构成必须调用父类的构造函数,但是父类的构成函数私有化以后,子类看不见就不能调用了,那么子类就无法实例化出对象。
-
C++ - 阻止派生类(derived class)重新定义虚函数(final&sealed)
阻止派生类(derived class)重新定义虚函数(final&sealed) 版权所有, 禁止转载, 如有需要, 请站内联系. 本文地址:http://blog.csdn.net/caroline_wendy/article/details/23421921 阻止派生类重新定义虚函数, 在java和C#中可以很简单的实现(finale&sealed), 但在C++中则需要使用public继承+复合(com
-
Sealed与Final
Sealed与Final修饰符其实并不是一个语言平台的产物,他们有着各自所属的语言环境,但这两个关键字都是.Net平台中不可或缺的,那么二者用法几何,随本文一探究竟。 sealed 修饰符可以应用于类、实例方法和属性。用于类时,该类被称为密封类,密封类不能被继承;用于方法时,该方法被称为密封方法,密封方法会重写基类中的方法;sealed修饰符应用于方法或属性时,必须始终与override
-
Scala的sealed关键字
Scala的sealed关键字 缘起 今天在学习Akka的监控策咯过程中看到了下面一段代码: def supervisorStrategy(): SupervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 10 seconds) { case _: ArithmeticException =...
-
在c++中如何阻止类被继承
这个话题是源自于一个面试题,我在网上查了一下有不少这方面的解说!我自己整理了一下,选择了一个自认为是最优方案!我们从最简单的开始:首先,大家都知道要阻止类被实例化,可以通过使用private or protected 关键字来声明默认构造函数。那么在阻止类被继承的时候,我们需要用到这个技巧。其次,阻止类被继承还需要使用private来控制继承的基类。 namespaceSampleP...
-
sealed(C# )
如果类被声明为sealed封装模式,则不允许其他类来继承此类。否则会报错。 // cs_sealed_keyword.cs using System; sealed class SealedClass { public int x; public int y; }class MainClass { static void Main() { Sealed
-
Kotlin-14.密封类(sealed class)
密封类(sealed class)受限的类继承结构(有限集合的类型,不能有任何其他类型); 扩展的枚举类enum,枚举类值集合也受限;sealed class和enum区别;枚举类的每个枚举常量只存在一个实例;密封类的一个子类可以有可包含状态的多个实例!密封类的所有子类都必须与密封类在同一文件中;密封类子类的子类(间接继承者)可以放在任何位置,无需在同一个文件中!密封类的好处在于:使用when表达式,如果能覆盖所有
-
C++中定义一个不能被继承的类(友元类+类模板)
自从`C++11`标准出来之后,就有了关键字`final`可以直接声明一个类不能被继承。那么,在此之前如果想要一个类不能被继承,可能还需要下一番功夫。
-
讯飞笔试题:不能被继承的类(C++实现)
如何使类不能被继承 如果大家熟悉java的话应该知道java中有一种类不能被继承,那就是final类.这种类有很多用处,尤其是在大的项目中控制类的继承层次. 使子类数量不至于爆炸.在使用了多继承的类层次中这也是防止出现菱形继承层次结构的一个好办法. 要实现一个不能被继承的类有很多方法. 主要的思路就是使子类不能构造父类的部分,这样子类就没有办法实例化整个子类.这样就限制了子类的继承...
-
如何实现一个不被继承的类?
(一)单例模式下的不被继承的类 从继承的特性来说,派生类继承其基类的私有成员,但是不可访问;派生类的构造要先调基类的构造函数构造基类然后在调自己的构造函数构造自己;我们可以将基类的构造函数写在private下,那么基类此时就是一个不被继承的类;但是这样基类是不可被继承,但同时他也不会正常实例化对象,因为不可访问其私有成员;这时我们可以借助单例模式来实现,通过静态方法实现返回一个对象,但是这种实例...
-
C++ 实现不允许继承的类
先从最简单的想法说起,把构造函数定义为Private那么此对象将没有办法创建当然也就没有办法被继承了,但这样的类定有什么意义呢? /* 把构造函数作用域限定为私有那么这个类是没有办法被继承的,因为不能创建对象的实例 */ class NoHeirOne { private: NoHeirOne() { } }; 我们让它变的有意义一些。为它提供一个...
-
C++ 11继承控制关键字:override(虚函数重载)和final(阻止继承、虚函数重载)
C++ 11添加了两个继承控制关键字:override和final。override确保在派生类中声明的重载函数跟基类的虚函数有相同的签名。final阻止类的进一步派生和虚函数的进一步重载。接下来让我们看看这些监督者如何消除你在类层次结构的设计和实施中的bug吧。 虚函数重载 一个派生类可以重载在基类中声明的成员函数,这是面向对象设计的基础。然而像重载一个函数这么简单的操作也会
-
C++定义不能被继承的类
C++的定义的类要求不能被继承,貌似最简单的想法是将构造函数定义为私有的,但事实上这样并不对,这会引发一个问题,用户如何实例化该类?因为友元关系是不能够被继承的,所以可以考虑友元+私有化构造函数来实现。 现在假设有一个class,叫Base,它不希望被继承,而且再假设有一个辅助类uninherit,Base是辅助类uninherit的友元,而且辅助类uninherit的构造函数是私有的,于是假定
-
C++实现不能被继承的类
C++实现不能被继承的类 前一段时间面试被问到一个问题,如何实现一个不能被继承的类? ....*&*>>. 被问得一脸蒙蔽 :)Sadface,赶紧回来查了查资料,今天复习又想起来了,就记录一下 注:以下程序均在VS2013下测试通过! 实现方法一:虚继承+友元+模板 如下代码 template class UnRetrivedBasedC
-
类什么情况下不可以被继承
1、如果类被final修饰,那么此类不可以被继承。 2、如果类中只有private的构造方法,那么此类不可以被继承。 其原因在于: (1)一个类一定会有构造函数,如果不写,那就是默认的无参构造函数,如果写,就只有所写的构造函数。 (2)子类的构造函数一定会调用父类的构造函数,但是如果父类中只有私有的构造方法,那么子类就无法调用父类,就会有问题。
-
sealed 关键字
sealed的中文意思是密封,故名思义,就是由它修饰的类或方法将不能被继承或是重写。 sealed关键字: 在类声明中使用sealed可防止其它类继承此类;在方法声明中使用sealed修饰符可防止扩充类重写此方法。相当于Java中的final类和final方法 密封类: 密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承。如果试图将一个密封类作为其它类的基类,C#将提示出错。 在哪些场合下使用密封类呢?实际上,密封类中不可能有派生类。如果密封类实例中存在虚成员函数,该成员函数可以转化
3 楼 dieslrae 2012-04-27 16:44
2 楼 pinnerc 2012-04-27 16:33
我也要试试。
1 楼 javagui 2012-04-27 16:12