博客的所有内容都是个人理解,难免有理解错误的地方,欢迎大家多多拍砖!
C++中static的用法可以分为两个大类:C风格的static的使用和C++风格的static的使用。
一、C风格的static的使用
1、局部静态变量
C风格的局部静态变量是在某个函数中定义的static变量,该变量只会被初始化一次,一直存在到程序结束。与普通局部变量的区别是,只会初始化一次,函数退出后该值依然存在一直到程序运行结束,会自动进行初始化(初始化为0或者空字节)。其实局部静态变量这些功能全局变量也可以实现但是使用全局变量总是一件风险比较高的行为,做好使用局部静态变量。
2、全局静态变量
C风格的全局静态变量实在全局命名空间中定义的static变量,具有static变量的公有特性。与普通全局变量的区别是,静态全局变量只能在定义的文件中使用,在其他文件中不可以访问。
总体上说局部静态变量扩大了局部变量的作用范围,静态全局变量限制了全局变量的使用范围。
二、C++风格的static的使用
1、静态成员变量
静态成员变量在头文件中声明,在cpp文件中初始化,变量类型 初始化格式类名::变量名=初始化值。如果变量类型是public,可以在别的文件中访问,访问方式为:类名::变量名。静态成员变量必须进行初始化。
2、静态成员函数
静态成员函数只能访问类中的静态成员变量和全局变量,因为它没有this指针,要想访问非静态的成员变量需要将对应对象作为参数传递到函数中。其中构造函数和虚函数都不能是static。如果构造函数是静态的,那么使用同一构造函数构造的对象都是同一个显然是不对的。如果虚函数是static的那么动态绑定的性质就会丢失,显然也是不对的。
既可以使用类名也可以使用对象访问类的静态函数,最好使用类名,这样能更清晰的表达静态函数的意义,属于整个类而不是某一个对象。静态函数可以被继承,子类可以定义域父类重名的静态函数,采用重载的机制,但是没有多态的效果。
分享到:
相关推荐
本文详细介绍了static关键字在C++中的作用和原理,并通过充分的代码示例进行了说明,帮助读者深入理解并正确使用static关键字。 `static`关键字在C++中的使用确实涉及到多个方面,包括局部变量的存储期、全局变量和...
《深入理解C++11:C++11新特性解析与应用》主要内容:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IBM XL编译器中国开发团队共同撰写。不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11...
深入理解C++11-C++11新特性解析与应用, 文件小而清晰,
在本教程中,那些ANSI-C++中新增的而老一代C++编译器大多不支持概念将备用如下标志标出: ANSI C++新增的概念 同样对于C和C++在实现上有明显不同的概念,将备用如下标志标出: C 与 C++不同的地方 编译器 本教程中...
理解这篇文档的前提是对C/C++语言中dlopen API有基本的了解。 这篇HOWTO的维护链接是: http://www.isotton.com/howtos/C++-dlopen-mini-HOWTO/ 二、问题所在 有时你想在运行时加载一个库(并使用其中的函数),这...
使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 dynamic_cast,...
Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++。本版对前一版进行了彻底的修订,内容经过了重新组织,更加入了C++ 先驱Barbara E. Moo...
C++中的try/catch/throw异常处理机制取代了标准C中的setjmp()和longjmp()函数。 二、关键字和变量 C++相对与C增加了一些关键字,如下: typename bool dynamic_cast mutable namespace static_cast using ...
//因为名称覆盖,C++编译器不会去父类中寻找0个参数的func函数,只会在子类中找func函数。 6 //1子类里面的func无法重载父类里面的func 6 //2当父类和子类有相同的函数名、变量名出现,发生名称覆盖(子类的函数名...
c++中的函数调用默认不适用动态绑定。要触发动态绑定,必须满足两个条件:第一,指定为虚函数;第二,通过基类类型的引用或指针调用。由此可见,virtual主要主要是实现动态绑定。 2.那些情况下可以使用virtual关键字...
我们介绍了普通程序运行时在内存中的布局,下面我们专门针对C++源代码以WinDbg为工具分析下C++程序的变量存储模型。 下面我们尝试分析C++变量的存储模型, 我们的测试程序非常简单: #include using ...
更令人兴奋的是利用C++的封装功能使开发者摆脱Windows中各种句柄的困扰,只需要面对C++中的对象,这样一来使开发更接近开发语言而远离系统。(但我个人认为了解系统原理对开发很有帮助) 正因为MFC是建立在C++的...
《C++面向对象程序设计》是计算机专业中一门重要的专业课。这次课程设计的目的是以程序设计语言为基础,通过完成一些程序设计,运用所学理论知识掌握面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使...
9.3C++中的静态成员 9.3.1定义静态数据成员的存储 9.3.2嵌套类和局部类 9.3.3静态成员函数 9.4静态初始化的依赖因素 9.5转换连接指定 9.6小结 9.7练习 第10章 引用和拷贝构造函数 10.1C++中的指针 10.2C+十中的...
简单的介绍了考试的主要内容和注意事项 1。static 的含义 2。理解:函数的定义,函数的调用,函数的参数传递 理解:内联函数 理解:带默认形式参数值的函数
1.2 理解Windows消息机制 2 1.3 利用Visual C++/MFC开发Windows程序的优势 4 1.4 利用MFC进行开发的通用方法介绍 5 1.5 MFC中常用类,宏,函数介绍 5 第二章 图形输出 6 2.1 和GUI有关的各种对象 6 2.2 在窗口中输出...
总所周知,在C++ 当中引入了四种新的类型转换操作符:static_cast, dynamic_cast, reinterpret_cast,还有const_cast。就自己见过的一些C++代码当中,它们的使用其实并不普遍。不少程序员依然乐于去使用C-like的类型...
C++变量的存储类别(动态存储、静态存储、自动变量、寄存器变量、外部变量) 动态存储方式与静态存储方式 我们已经了解了变量的作用域。作用域是从空间的角度来分析的,分为全局变量和局部变量。 变量还有另一种属性...
面试题25:关键字static在C和C++中的区别 面试题26:C语言的结构体和C++的有什么区别 面试题27:C中的malloc和C++中的new有什么区别 面试题28:C++的引用和C语言的指针有什么区别 第4章 预处理、保留字 4.1 预处理 ...
他善于用容易理解的方法和语言说明复杂的概念。许多人认为他开创了计算机书籍贴近大众的新风,为我国的计算机普及事业做出了重要的贡献。 谭浩强教授曾获全国高校教学成果国家级奖、国家科技进步奖,以及北京市政府...