关于C++的静态类和C#中的静态类的比较

在C++中,类不能有static修饰,

**C++静态类是指只用于包含静态成员的类型,不能进行实例化。**当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。

我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化。

静态函数只要使用类名加范围解析运算符 :: 就可以访问。

静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。

静态成员函数有一个类范围,他们不能访问类的 this 指针。

静态成员函数与普通成员函数的区别:- 静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。- 普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针。

而C#中:
静态类是有static修饰的,

        仅包含静态成员,无法实例化,也就不能包含实例构造函数。但是可以声明静态构造函数分配初始值或设置某个静态状态。

那为什么静态类没有必要存在C++中呢?

一个类是对一个概念的描述,类的本质是它维护了一个不变式,也就是说它有一个状态,它所有的接口都是为了访问或者获取这个状态以及跟状态相关的操作。一个静态类没有状态,因此就没有必要成为一个类。

C++由于具有传值、传址、哑元功能,使用静态类不仅多余而且也完全没有必要,相反,对Java、C#之类“改进型语言”来说,由于为避免指针,防止过多的产生对象实例,就必须额外的引入一些新的“先进性”的东西,比如静态类。然而,静态类本身是一个半成品(或是终极产品),由于其无法继承,静态类的产品化会因为不便升级而成为一种垃圾。

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

有此可见:
C++与C#关于静态类有区别。

C#中,可以指定一个静态的类。而C++中可以在类中声明静态的成员的类型。 当一个类权却脱离实例数据和对象时可以使用静态类(C++中静态的成员类型),对静态成员变量智能是程序运行时初始化,不能在类内初始化。静态类不需要,也没有基类。

例如,在C++编程中,需要用到一个公共的数据,可以单独声明一个类,

class ShareData
{public:static  QList<QByteArray> list;static  QList<QString> listTest;static  QList<tagPosInfo_t> webTagInfoSendlist;static  uint16_t onlineAncNum;static  uint16_t totalAncNUm;};

在,类的外部初始化该静态数据:

//定义全局变量
QList<QByteArray> ShareData::list = QList<QByteArray>();QList<QString> ShareData::listTest = QList<QString>();QList<tagPosInfo_t> ShareData::webTagInfoSendlist = QList<tagPosInfo_t>();uint16_t ShareData:: onlineAncNum = 0;
uint16_t ShareData:: totalAncNUm = 0;

关于c++静态类的说法相关推荐

  1. 大疆测试面经(部分附答案)

    大疆测试岗知识点 软件测试 常用的测试方法和自动化测试工具的了解 常用的测试方法:是否关心软件的内部结构(黑盒测试,白盒测试,灰盒测试),是否执行代码(静态测试,动态测试),开发过程(单元测试,集成测 ...

  2. 农村信用社招聘(计算机)真题汇总

    农村信用社招聘(计算机)历年真题试卷汇编1 (题后含答案及解析) 题型有:1. 填空题 2. 单项选择题 3. 多项选择题 4. 判断题 5. 操作题 6. 简答题            填空题 1. ...

  3. c# poi写入e_C# 面向对象 静态类和静态成员

    使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员. static 修饰符可用于类.字段.方法.属性.运算符.事件和构造函数,但不能用于索引器.析构函数或类以外的类型.如, sta ...

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

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

  5. 弱类型、强类型、动态类型、静态类型语言的区别

    类型系统的一些概念,众说纷纭,使用上也比较乱.有些东西,甚至不好严格定义.以下算学术界的一种相对"严格"的说法. 首先了解一下基本概念 Program Errors trapped ...

  6. (教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)...

    本节课我们来学习类的扩展分类,看我的标题中就罗列出了类的分类,类按照声明方式和功能定义共分为这六种类,实例类就是我们一直在用的类,class关键字前没有其他的修饰符,之前已经有很多实例类的使用方法了, ...

  7. 在kotlin companion object中读取spring boot配置文件,静态类使用@Value注解配置

    在kotlin companion object中读取配置文件 静态类使用@Value注解配置 class Config {@Value("\${name}")fun setNam ...

  8. Exception in thread main java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法

    Exception in thread "main" java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static:只能在静态类型或顶级类型中才 ...

  9. c语言第1章以下说法错误的是,计算机等级考试c语言程序设计习题

    计算机等级考试c语言程序设计习题 第1章 C语言程序设计概述 一.选择题 1.下列关于计算机语言的叙述中,正确的是_______. A.在计算机语言中,只有机器语言属于低级语言 B.高级语言的源程序可 ...

最新文章

  1. R绘制散点图以及带圈定的散点图(Scatterplot With Encircling)
  2. CAS SSO实践中,目前解决的问题和有待解决的问题
  3. Rtx 实时通知实现
  4. Library not loaded: @rpath/libswiftCore.dylib
  5. [.NET跨平台]Jexus独立版本的便利与过程中的一些坑
  6. Qt Creator 2.8.1,qt4.8.5 需要含gcc4.4 的mingw
  7. WCF读书笔记(1)
  8. java中Field中的方法,解析Java中的Field类和Method类
  9. python按键退出循环_Python的for循环退出
  10. 一篇文章带你搞懂DEX文件的结构
  11. Kaggle_Predict Future Sales_Prac 1(时间序列预测商品销量)
  12. Linux向github上传代码以及遇到的坑们
  13. freyja最重要的一个功能完成
  14. 阅兵方阵(蓝桥杯2018真题)
  15. 怎样分析数据致提高产出?(一)
  16. VGA和HDMI传输距离是否有要求?
  17. 2021-10-22 今日总结
  18. java计算机毕业设计小区失物招领网站源程序+mysql+系统+lw文档+远程调试
  19. 分享几个关于UG装配的小问题,干货满满!!!
  20. C++ sqlite3解决中文排序问题

热门文章

  1. 使用Diskpart建立GPT磁盘分区图文教程
  2. GPU中与CUDA相关的几个概念
  3. [云炬创业管理笔记]第三章打造优秀创业团队讨论1
  4. [云炬创业管理笔记]第四章把握创业机会测试2
  5. 科大星云诗社动态20210125
  6. Coursera吴恩达《序列模型》课程笔记(2)-- NLP Word Embeddings
  7. 预编译头文件来自编译器的早期版本_Debug
  8. 快速WinForm开发
  9. Asp.net常用技巧
  10. EffectiveC++编程的50个建议