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

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

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

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

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

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

    题目描述(题目链接:https://www.luogu.org/problem/P1481) 风之子刚走进他的考场,就…… 花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花) 风之 ...

  2. 「牛客CSP-S2019赛前集训营1」仓鼠的石子游戏

    传送门 NowCoder 解题思路 考虑这样一件事:在任何的同一个石圈,后手肯定会输. 证明很简单,手玩一下就可以大致意会. 但是有一种特殊情况,就是大小为1的圈,这种圈就是起到一次交换先后手的作用, ...

  3. 「CF521D」Shop

    传送门 Luogu 解题思路 当只有第三类操作时,我们显然先进行val较大的操作,这是显然的. 那么就考虑把所有的操作都转变为第三类操作. 第一类操作,显然很容易变为第二类操作:单点维护最大的最终结果 ...

  4. 「NOI2015」荷马史诗

    传送门 Luogu 解题思路 \(k\) 叉 \(\text{Huffman}\) 树板子题,至于最长串最短,只要同样权值的优先考虑深度小的就好了. 细节注意事项 咕咕咕 参考代码 #include ...

  5. 「CF10D」LCIS

    传送门 Luogu 解题思路 首先考虑怎么求方案,这样才可能会输出方案. 考虑 \(\text{DP}\). 设 \(f[i][j]\) 表示在 \(a\) 序列中选择一个 \([1...i]\) 的 ...

  6. 【高软作业3】:原型化系统 DevTools

    原型化系统:DevTools       密码:lcx 1. 这是一个什么样的平台? DevTools,可译为:开发者工具库.初衷是聚集各类开发工具,方便开发者获取:此外,大家可以分享自己的工具库与工 ...

  7. sklearn中调用PCA算法

    sklearn中调用PCA算法 PCA算法是一种数据降维的方法,它可以对于数据进行维度降低,实现提高数据计算和训练的效率,而不丢失数据的重要信息,其sklearn中调用PCA算法的具体操作和代码如下所 ...

  8. 一、 SVN概述&工作方式&恢复历史版本

    What why how 1 什么是SVN?作用是什么? SVN(SubVersion),版本控制系统.采用了分支管理系统,用于多人共同开发一个项目,共用资源的目的. 2 为什么要有SVN? 解决代码 ...

  9. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 图片

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. LoadRunner回放脚本时,显示浏览器的设置

    打开LoadRunner的VuGen,选择Tools-->General Options-->Display,在Display里将 Show browser during replay打钩 ...