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

观点一:根据现代的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. idea增删改查

    idea应用mybatis写增删改查 entity层 private Integer id;private String userCode;private String userName;privat ...

  2. CXL联盟正式成立:成员均是行业巨头

    导读 今天,阿里巴巴.思科.戴尔EMC.Facebook.Google.HPE.华为.Intel.微软(按英文首字母排序)联合宣布,CXL联盟(Compute Express Link Consort ...

  3. 可以看一下我学习linux的过程

    学习Linux的最佳方法是将它用于日常工作. 阅读Linux书籍,观看Linux视频不仅仅是足够的. 学习Linux没有捷径可走. 你不可能在一夜之间在Linux中掌握. 这需要时间和持久性. 刚刚潜 ...

  4. DeepLearning算法文章

    算法源码: learn_dl : https://github.com/hanbt/learn_dl rnn-from-scratch : https://github.com/pangolulu/r ...

  5. Linux CentOS7 VMware 相对和绝对路径、cd命令、mkdir/rmdir、rm命令——笔记

    一. 相对和绝对路径 绝对路径是从/(也被称为根目录)开始的,比如/usr.cd /root/ pwd 注:判断用户当前所处的位置 相对路径是以 . 或 .. 开始的 二.cd命令 cd 是进入到当前 ...

  6. linux零散知识

    1.Linux的“| ”管道符用法 上一条命令的输出,作为下一条命令参数 方式:command1 | command2 Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符 ...

  7. quartz spring 实现动态定时任务

    在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间.频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quar ...

  8. require - 引入文件

    导入 /** * Creates the node for the load command. Only used in browser envs. */ req.createNode = funct ...

  9. 力扣347——前 K 个高频元素

    这道题主要涉及的是对数据结构里哈希表.小顶堆的理解,优化时可以参考一些排序方法. 原题 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2, ...

  10. 单词统计——基本Java实现(无特殊设置)

    日期:2019.5.4 博客期:066 星期六 今天写了统计一篇文章中的单词数量,把出现最多的前几个显示出来,差不多就是这么个程序! 实现思想: 分布处理: 1.读取文件,将文件里的字符串按照换行符和 ...