- 浏览: 637076 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
laj12347:
楼主太给力了
Eclipse设置、调优、使用 -
kunlyy:
楼主太给力了
Eclipse设置、调优、使用 -
knight_black_bob:
mark ~
Eclipse设置、调优、使用 -
hujunxiang:
好全好全~~~
Eclipse设置、调优、使用 -
bugyun:
楼主辛苦了
Eclipse设置、调优、使用
static关键字java中也有, 是静态的意思, 在java中可以用来修饰变量和方法. 修饰变量时, 变量就成为类变量, 对于所有对象都具有相同的值; 修饰方法时, 方法就成为类方法, 不能访问成员变量.
c++中的关键字也类似, 用来修饰变量和方法, 不过比java中还稍微多一些功能:
(1) 修饰全局变量: 全局变量将仅在该文件内可用, 其它文件中无法访问到这个变量
(2) 修饰全局方法: 全局方法将仅在该文件内可用, 其它文件中将无法访问到这个方法
(3) 修饰局部变量: 可以将其看作static修饰的全局变量了, 只是作用范围变为局部, 和局部变量原来的作用范围相同.
(4) 修饰类变量: 和java中类似, 成为类变量, 对于所有对象都具有相同的值
(5) 修饰类方法: 和java中类似, 成员类方法, 不能访问成员变量.
(1)static修饰全局变量
Static.cpp
static int s_int = 10;
测试1, 通过声明extern int s_int; 看能不能访问到s_int
Main.cpp
#include <iostream> using namespace std; extern int s_int; int main(void) { cout << "s_int:" << s_int << '\n'; }
编译代码, 编译器将提示错误: undefined reference to `s_int', 说明Main.cpp文件无法访问到Static.cpp中的s_int
测试2, 可以在多个文件中定义s_int变量, 且不会出现重定义的错误, 同时不同文件中定义的s_int变量都相互独立, 互不干扰.
Static2.cpp
static int s_int = 11;
Main.cpp
#include <iostream> #include "Static.cpp" // include的效果就相当于把代码copy到Main.cpp的这里, 也就是相当于在Main.cpp的这里定义了s_int, 所以main中可以访问到s_int. using namespace std; int main(void) { cout << "s_int:" << s_int << '\n'; return 0; }
#include "Static.cpp"时, 得到的结果是10; #include "Static2.cpp"时, 得到的结果将是11. 所以这个程序中其实是有两个相互独立的s_int存在.
(2) static修饰全局方法
Static.h
#ifndef STATIC_H_ #define STATIC_H_ static void staticMethod(); #endif
Static.cpp
#include <iostream> using namespace std; static void staticMethod() { cout << "staticMethod()" << '\n'; }
Main.cpp
#include <iostream> #include "Static.h" using namespace std; int main(void) { staticMethod(); return 0; }
编译后编译器会提示错误, 'void staticMethod()' used but never defined, 使用了staticMethod(), 但并没有定义他.
额, 不是在Static.cpp中定义了么?
和之前static修饰变量一样, static修饰全局方法后, Static.h和Static.cpp中的两个staticMethod()就变成了完全没有任何关系的两个独立的方法了, 那当然Static.h中的那个方法仅仅是声明了, 并没有定义.
解决办法, 那就是为Static.h中的那个staticMethod进行定义.
Static.h
#ifndef STATIC_H_ #define STATIC_H_ #include <iostream> static void staticMethod(); static void staticMethod() { std::cout << "Static.h : staticMehtod()" << '\n'; } #endif
(3) static修饰局部变量
其实就可以看作是static全局变量, 仅仅是作用范围变小, 仅在定义他的代码块中可以访问到.
同时他和局部变量也有一些区别, 局部变量在每次进入方法时初始化, 方法结束时回收掉, 而static局部变量是仅在第一调用方法时初始化, 接下来的调用将不再初始化, 且在方法结束时不会被回收掉.
Main.cpp
#include <iostream> void localStatic() { static int s_int = 10; std::cout << "s_int:" << s_int << '\n'; s_int++; } int main(void) { for (int i = 0; i < 10; i++) { localStatic(); } }
(3) 修饰类变量时
Static.h
#ifndef STATIC_H_ #define STATIC_H_ class Static { public: static int s_int; } #endif
Static.cpp
#include "Static.h" int Static::s_int = 10;
Main.cpp
#include "Static.h" #include <iostream> int main(void) { Static s1; Static s2; std:: cout << "s1.s_int:" << s1.s_int << '\n'; std:: cout << "s2.s_int:" << s2.s_int << '\n'; // 修改后, 两个对象还是具有相同的值 s1.s_int = 11; std:: cout << "s1.s_int:" << s1.s_int << '\n'; std:: cout << "s2.s_int:" << s2.s_int << '\n'; }
(3) 修饰类方法时
Static.h
#ifndef STATIC_H_ #define STATIC_H_ class Static { public: int m_int; static int s_int; Static(); static void staticMethod(); } #endif
Static.cpp
#include "Static.h" Static::Static() { m_int = 1; s_int = 2; } void Static::staticMethod() { // m_int = 3; // 无法访问成员变量 s_int = 4; // 类变量可以访问 }
Main.cpp
#include <iostream> #include "Static.h" int main(void) { Static s; std::cout << "Static.m_int:" << s.m_int << '\n'; // 静态方法的调用和java中也类似, 既可以在对象上调用, 也可以使用类直接调用, 但推荐第二种. s.staticMethod(); Static::staticMethod(); }
发表评论
-
c++ #include 类互相包含问题
2014-02-21 10:24 3495A.h文件 #ifndef _A_H_ #define ... -
c++ 引用的几个错误用法
2013-11-20 17:42 1864[size=medium] (1):返回临时变量的引用。 ... -
javaer学c++: template的简单使用
2013-11-03 23:51 0[size=medium][/size] -
javaer学c++: 总是将析构函数写为可重写
2013-11-03 23:50 0占坑!!!!! -
javaer学c++: 类的数组成员的初始化
2013-11-03 23:49 0占坑!!!!! c++中数组成员的初始化真麻烦, 需要借助 ... -
javaer学c++: struct
2013-11-03 23:48 0除了作为函数参数的封装, 其它的用法在c++中都被类所替代了 ... -
javaer学c++: c++中的类型转换
2013-11-03 23:45 0c++中的类型转换又要啃爹了, 又分为了n个迷惑人的方式 -
javaer学c++: 数组指针, 指针数组
2013-11-03 23:44 0占坑!!!!! -
javaer学c++: 函数指针
2013-11-03 23:44 0占坑!!!!! -
javaer学c++: 容器map的使用
2013-11-03 23:43 0占坑!!!!! -
javaer学c++: 容器set的使用
2013-11-03 23:43 0占坑!!!!! -
javaer学c++: 容器vector的使用
2013-11-03 23:42 0占坑!!!!! -
javaer学c++: c++编译器会帮我们自动生成的5个方法
2013-11-03 23:42 0占坑!!!!! -
javaer学c++: 继承
2013-11-03 23:38 0c++中的继承又是一个特别坑爹的地方, 有哪些坑爹点呢? ( ... -
javaer学c++: 函数参数默认值
2013-11-03 23:37 0占坑!!!!! -
javaer学c++: 条件编译
2013-11-03 23:36 0占坑!!!!! -
javaer学c++: 宏
2013-11-03 23:35 0占坑!!!!! -
javaer学c++: virtual关键字
2013-11-03 23:34 0占坑!!!!! -
javaer学c++: c++中的枚举
2013-11-03 23:34 0占坑!!!! -
javaer学c++: c++中的类
2013-11-03 23:29 1081这个和java中的类类似, 仅仅是写法上有些区别, 以及类的 ...
相关推荐
javaer-roadmap Github上已经有很多 java及周边技术的优秀项目,发现深度有余,广度不足。所以本项目不在深度上继续扩展,而在广度上给大家分享一些当前职场火热的技术导航。其中包括相关的、书籍、资料、网站等。...
toBeTopJavaer,成为Javaer-JavaSouthType.zip
`goto`是C/C++中的一个关键字,用于无条件跳转。Java设计者出于安全考虑,未将其纳入Java语言。 - **替代方案**: 使用`break`或`continue`来控制循环。 **1.3 `&`与`&&`的区别** - **知识点**: `&`是位运算符,用于...
成为顶尖Javaer - Java工程师成神之路 主要版本 更新时间 备注 v4.0 2022-05-20 知识体系完善,知识点补充 v3.0 2020-03-31 知识体系完善,在v2.0的基础上,新增20%左右的知识点 调整部分知识的顺序及结构,方便...
讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java程序员阅读。
成为顶尖Javaer - Java工程师成神之路 主要版本 更新时间 纪要4.0版 2022-05-20 知识体系完善,知识点补充3.0版 2020-03-31 知识体系完善,在v2.0的基础上,新增20%左右的知识点调整部分知识的顺序及结构,方便阅读...
标题中的"Gmail API for Java"指的是使用Java编程语言与Google的Gmail服务进行交互的一系列API接口。...通过Java中的Gmail API,我们可以实现自动化邮件处理、邮件通知、邮件分析等多种功能。 ...虽然描述本身为空,但...
成为Javaer的榜首-Java工程师成神之路主要版本更新时间备注v3.0 2020-03-31知识体系完善,在v2.0的基础上,再增加20%左右的知识点调整部分知识的顺序及结构,方便阅读和理解通过GitHub Page构建,方便阅读v2.0 2019...
【软工1503-Javaer 集-信息盾-用户需求说明书-V1-201909281】文档描述了一个旨在保护快递业务中用户隐私的项目——"信息盾"。该项目主要关注如何在快递过程中保护用户的个人隐私信息,如姓名、电话和地址等,以防止...
Github | 吉特为什么会有这个开源知识库知识库取名toBeBetterJavaer,即To Be Better Javaer,意为「成为一名更好的Java程序员」,是我自学Java以来所有原创文章和学习资料的大聚合。内容包括Java基础、Java ARM...
在数字化时代,人们逐渐习惯了使用智能设备记录生活点滴,而电子日记本系统的诞生正是为了迎合这一趋势,满足用户记录日常心情、活动等需求。电子日记本不仅能够提供私密的文字记录空间,还能通过多媒体形式让用户更...
《电子日记本设计与实现-用户需求说明书》 在当今数字化时代,电子日记本逐渐取代了传统的纸质日记,成为人们记录生活、表达情感的新选择。本文档详细阐述了一个专为安卓用户设计的电子日记本软件的开发需求,旨在...
java8 源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员查阅的 ...
互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...
1. **Java基础**:这部分内容通常包括Java语法基础,如变量、数据类型、控制结构(如if-else、switch-case、for、while)、类与对象、封装、继承、多态等概念。此外,还有异常处理、输入输出流、集合框架(如List、...
《电子日记本设计与实现:用户需求详解》 在当今数字化时代,传统的纸质日记已无法满足用户多样化的需求。为了适应这种变化,一款集文字、图片、声音于一体的智能电子日记本应运而生。本文将详细阐述这款针对安卓...
Java编程语言作为全球最受欢迎的开发语言之一,深受程序员的喜爱。这份名为"toBeBetterJavaer-master"的压缩包文件,提供了一份全面且深入的Java学习资源,...祝你在Java的世界里越走越远,成为一名更优秀的Javaer!
通用语言 Java程序员编写的类似common-lang工具包包名就是要用大驼峰,不想改成go规范的包名。... string)布尔IsAnyEmpty(list ... string)布尔IsAnyNoneEmpty(list ... string)布尔IsBlank(str字符串)bool ...
leetcode下载 路漫漫其修远兮 吾将上下而求索 1.基本介绍 该项目为平时总结的技术资料和工具使用以及面试总结。 1.1.面试资料 ...Javaer - Java工程师成神之路 https://github.com/hollischuang/toBeTopJavaer
后端javaer的福音!这是一个基于vue-element-admin的基础模板vue-admin-template改造+简化而来(例如,加入了标签导航,国际化等等),可以让非专业前端的javaer快速上手的前后端分离项目(前端部分),相信你在日常开发...