3.25cpp学习笔记(生命周期+作用域+namespace这东西+模块)

1.关于变量的生命周期:

3.25cpp学习笔记(生命周期+作用域+namespace这东西+模块)_第1张图片

不同定义的,的变量有不同的生命周期其,在分析的时候大致可以分成以下三个区域

3.25cpp学习笔记(生命周期+作用域+namespace这东西+模块)_第2张图片

1.全局变量:生命周期到程序结束

2.new 出来的变量,需要认为进行释放,否则到关机为止

3.static变量,效果类似java,第一次定义的赋值不会再重复定义,生命周期和全局变量一样

4.局部变量:没啥稀奇玩意,方法断了这个就停了

详细代码如下啊

using namespace std;
void f();//提前对于方法的声明
int a = 12;//(1)全局变量
//    生命周期为程序结束;
int  main() {
	int c = 1;//(3)(局部变量)生命周期是从定义到方法结束

	int* c1 = new int(2);//(4)这种new出来的,生命周期是有自己确定的
	//java里面虽然天天new ,但是程序结束以后Java会自己吧这坨东西删掉
	//c++没这个功能了说,
	//如果不使用手动删除的delete功能
	delete c1;
	//那么这个玩应就会产生堆叠
	
	return 0;
}
void f() {
	static int b = 1;//(2)一个静态变量,应该是和全局变量一起放在静态中
	//这个静态变量就算重复使用这个方法,也不会重新赋值为1,静态变量已经开辟好空间了
	//但这个作用域,不要和生命周期进行混淆,这个生命周期和全局变量一样
	b++;
	cout << b << endl;
	return;
}

2.关于作用域,目前来看比较像java中的可见性

(1)局部变量的作用范围仅仅只是引号而已

(注明,这里可能有个先入为主的概念.类似这一样)

//关于"::"的使用
int a = 12;
int  main() {
	int a = 123;
	cout << a;  //强龙不压地头蛇.这里应该是a
	cout << ::a;//如果想用全局变量,前面加一个::
	//尽量避免这种情况吧

(2)全局作用范围,如果不出意外的话就是从自身开始

(3)关于extern , 可以修饰方法和变量 , 表示引用一个已经在别处定义的变量(会自动去别处,甚至是再自己下面去寻找这个东西)

(注意一下这个搜索范围是全局作用域,也就是源文件才可以搜索到,或者说是在同一个文件目录下才能看到)

\

3.25cpp学习笔记(生命周期+作用域+namespace这东西+模块)_第3张图片

只能在源文件这个模块里面找到,剩下的就算是标头文件也只能老老实实导包,对了其实导完就可以用extren去访问h文件,只不过个人感觉没啥必要了...

导包

头文件里面的

这个extren甚至可以是避免声明使用后面的方法,但是一旦被static修饰,就只能定义的文件中使用了

 static相当于privary的作用?

当然再自己文件里这俩还是可以共存的

3.25cpp学习笔记(生命周期+作用域+namespace这东西+模块)_第4张图片

3.关于命名空间:namespace

(头文件哪里还没有处理完成,所以这里先不弄)

可以理解为一个附加的姓氏?王五和张五名字都是五,加了前面的姓氏就可以准确交出名字,就不会发生商场里喊一声帅哥全都回头的事情了

使用(空间名字)+"::"+变量名字

//这条语句就相当于为里面所有的变量都冠上一个姓氏
namespace A {
	int a = 112;
}
namespace B {
	int a = 122;
}
extern int a;
	cout << a<<" "<

 关于std,那个是标准库里面的实体空间

(4)关于头文件的问题

头文件的作用原理其实是这个

3.25cpp学习笔记(生命周期+作用域+namespace这东西+模块)_第5张图片

 

在h*文件中写好要使用方法的声明,然后在同名的cpp*文件中把具体的方法实现或者赋值(有时候要加extern)

3.25cpp学习笔记(生命周期+作用域+namespace这东西+模块)_第6张图片

 

你可能感兴趣的:(s,c++)