看了网上的观点,大致有这几种比较好的。

观点一:根据现代的C++观点,静态类没有必要存在于C++中。

一个类是对一个概念的描述,类的本质是它维护了一个不变式,也就是说它有一个状态,它所有的接口都是为了访问或者获取这个状态以及跟状态相关的操作。一个静态类没有状态,因此就没有必要成为一个类。在C++中静态方法不如非静态非类的成员方法好,尤其是使用了模板的情况下。

我的疑问:如果只声明类起显示作用呢?

观点二:C++里不可能有静态类的说法,相反,在Java里倒是有这么一说。
C++由于具有传值、传址、哑元功能,使用静态类不仅多余而且也完全没有必要,相反,对Java、C#之类“改进型语言”来说,由于为避免指针,防止过多的产生对象实例,就必须额外的引入一些新的“先进性”的东西,比如静态类。然而,静态类本身是一个半成品(或是终极产品),由于其无法继承,静态类的产品化会因为不便升级而成为一种垃圾。
同样,即便是在Java里,静态类的作用也仅相当于包含静态实例的C++类型定义,然而从语义上还没有C++定义的直观,为了对付一个小小的指针,避免伪引用,有必要做这么大的动作吗?我对此感到不值。

观点三:C#或Java的
类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR;特指:C#语言) 自动加载。
静态类只用于包含静态成员的类型,它既不能实例化,静态类的特性是防止继承,防止外部来NEW。
所以C++中不存在静态类
观点四:使用静态类来包含不与特定对象关联的方法。
例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。
静态类的主要功能如下:
    它们仅包含静态成员。(仅包含静态成员不是上面说的包含不操作实例数据,不与对象关联矛盾吗?)
    它们不能被实例化。
    它们是密封的。
    它们不能包含实例构造函数(C# 编程指南)。
    静态类不能使用abstract或sealed修饰符。
    静态类默认继承自System.Object根类,不能显式指定任何其他基类。
    静态类不能指定任何接口实现(不能有接口实现,那起什么作用)。
    静态类的成员不能有protected或protected internal访问保护修饰符。

观点五:

静态类和静态类成员(C# 编程指南)

静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。

结论:

当一个类完全脱离实例数据和对象时可以使用静态类。

静态类可以有自己的成员变量和成员函数,但都必须是静态的。对静态成员变量只能是程序运行开始时初始化,不能在类内初始化。

静态类没有基类。

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于c++静态类的说法的更多相关文章

  1. C语言 const, static, static const 的区别

    基本定义: const  就是只读的意思,只在声明中使用;static 一般有2个作用,规定作用域和存储方式. 对于局部变量, static规定其为静态存储方式, 每次调用的初始值为上一次调用的值,调 ...

  2. oo的一些概念

    http://docs.kissyui.com/5.0/guides/base/oo.html JavaScript 语言自成体系,自有一套代码重用的模式,这些常见的代码重用模式可以在<Java ...

  3. c中常用的关键字static const volatile

    在C语言中,关键字static有三个明显的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数 ...

  4. 涨知识III - 百度2016校园招聘——移动软件研发工程师

    1.列关于线程调度的叙述中,错误的是(). 正确答案 :BE A调用线程的sleep()方法,可以使比当前线程优先级低的线程获得运行机会 B调用线程的yeild()方法,只会使与当前线程相同优先级的线 ...

  5. 【C/C++】static关键字

    首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0. static性质 隐藏 当同时编译多个文件时,未加static前缀的全局变量和函数都具有全局 ...

  6. const和static const的区别(未整理)

    对于C/C++语言来讲,const就是只读的意思,只在声明中使用;static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调 ...

  7. C# 静态类

    静态类是不能实例化的,我们直接使用它的属性与方法,静态类最大的特点就是共享. 探究 public static class StaticTestClass { ; public static void ...

  8. 【转】C#类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)

    静态类 -------------------------------------------------------------------------------- 静态类就是在class关键字前 ...

  9. C#静态类 转载:(原文:http://www.cnblogs.com/chenlulouis/ )

    静态类是不能实例化的,我们直接使用它的属性与方法,静态类最大的特点就是共享. 探究 public static class StaticTestClass{    public static int ...

随机推荐

  1. 回顾PHP:第一章:PHP基础语法

    第一章:PHP基础语法 一.常量: 1.1.define()函数:define(‘R’,’5’,’true’); //R:常量名,5:常量值,true:常量名对大小写不敏感,为false时表示对常量名 ...

  2. java并发AtomicIntegerArray

    java并发AtomicIntegerArray AtomicIntegerArray的原子性 AtomicIntegerArray的原子性是对数组的元素的,不是数组. 源码基于openjdk 1.8 ...

  3. java程序员的就业指导(重点)

    想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些内 ...

  4. JQuery--jQuery对象与DOM对象

    1.JQuery是继Prototype之后又一个优秀的JavaScript库: 2.Jquery的理念是“写得少,做得多”,它有如下优势: --1)轻量级:2)强大的选择器:3)出色的DOM操作的封装 ...

  5. Spring事务服务

    Spring事务服务 (2013-07-22 11:13:36) 转载▼ 标签: 事务管理 ssh 分类: Sping Spring为事务管理提供了一流的支持.同时支持编程式事务和声明式事务.无论是编 ...

  6. Django 数据库访问性能优化

    使用标准的数据库优化技术: 在进行Django数据库访问性能优化之前,首先应该使用标准的数据库技术对其进行优化,比如给字段加索引,通过使用 django.db.models.Field.db_inde ...

  7. qrcode在手机上不显示的问题

    可以试试以下解决方案: 1.修改qrcode.min.js:里的function n()红线区域替换成这个 , 原因是这样子才能支持安卓机显示.

  8. vue小程序ref和v-for结合使用得到ref数组的一些问题

    项目中需要对每一个民宿里的每一个房间都需要popup弹出层来介绍每一个房间,房间数据都在一个接口(此民宿)上. 主要代码如下: HTML: <view v-for='(item,index) i ...

  9. k-近邻算法的优缺点及拓展思考

    //2019.08.03晚#k-近邻算法的拓展思考与总结1.k-近邻算法是一种非常典型的分类监督学习算法,它可以解决多分类的问题:另外,它的整体思想简单,效果强大.它也可以用来解决回归问题,使用的库函 ...

  10. 十二 事务&安全问题&隔离级别

    事务 transaction,指一组操作,里面包含许多单一逻辑,只要一个逻辑没有执行成功,那么都算失败.所有的数据都回到最初的状态(回滚). 为什么要有事务? 确保逻辑的成功,例子:银行转账 事务针对 ...