c++第三次作业---作用域

c++第三次作业----作用域

1:什么是作用域

作用域是一个标识符在程序正文中有效的区域,即定义的变量可以被应用的有效区域,下面会举出对应的例子进行进一步解释。

2:局部作用域

下面给出一个函数实例

#include<iostream>
using namespace std;

int main()
{
	int i;
	int b = 3;
	for (i = 0; i<1;  i++)
	{
		int b = 1;
		cout << b << endl;
}
	cout << b << endl;
}

如上面的代码所示,这是一个简单的main函数,其中在函数内部定义了一个整形变量b在函数内部中还有一个for循环结构,不难看出在for循环结构中还有一个b并且两个b的赋值是不一样的,我们在不同的地方对两个b的值进行输出发现输出的b的值也不一样,其实这就是因为b的作用域不同的原因导致的,比如第一个b作用域为整个函数,而第二个b作用域只在for循环中存在一旦超出这个循环后它的值就不再起任何的作用,所以因为作用域的不同导致了输出结果的不同。

3:类作用域

类的作用域同样的下面也给出一个实例

#ifndef a_h
#define a_h
class Clock {
	int hour, minute, second;
public:
	void settime(int a, int b, int c);
	void showtime();

};
#endif
#include<iostream>
#include"a.h"
using namespace std;
void Clock::settime(int a, int b, int c)
{
	this->hour = a;
	this->minute = b;
	this->second = c;
}
void Clock::showtime()
{
	cout << hour << endl << minute << endl << second << endl;
}
void main()
{
	Clock n;
	int a = 1, b = 2, c = 3;
	n.settime(a, b, c);
	n.showtime();

}


如上图所示给出了一个Clock类的定义,类中有定义了两个函数与一些private变量,而这些变量的作用于就在类中,如果我们想要在类的外面引用这些变量的话那么要先加上”类名::“进入这个类从而才能访问这个类的成员如果我们直接访问的话就会出现如下现象

因为showtime函数的作域只在这个类中,所以在函数外部如果不加上“类名::”进行对类的内部进行访问的话就会出现报错,这就数类的作用域

4:命名空间的作用域

在这里我们引用树上的例子里5.1

#include<iostream>
using namespace std;
int i;
namespace Ns {
	int j;
}
int main()
{
	i = 5;
	Ns::j = 6;
	{
		using namespace Ns;
		int i;
		i = 7;
		cout << "i=" << i << endl;
		cout << "j=" << j << endl;

	}
	cout << "i=" << i << endl;
	return 0;
}

运行后得到答案

i=7

j=6

i=5

在这个例子中i具有命名空间作用域,它属于全局命名空间,它的作用域到文件结尾才完,第一次输出这个值是7这是因为有局部变量i把具有命名空间作用域的变量i隐藏了所以输出的值是局部作用域中所定义的7,当第二次输出是i为5是因为此时i的定义已经不在局部而是扩展到了整个函数,并且刚才定义为5的i已经超过了它所作用的范围所以此时的i为5,同时变量j也有空间作用域,它被声明在空间Ns中,通过引用后为其赋值所以他的输出值为6

通过以上的说明发现作用域其实指的就是定义的变量在不同的地方的作用范围,并且在不同的情况中会出现不同的结果,此博客为个人对作用域的理解,如果有错请斧正,谢谢。

posted @ 2019-09-24 16:47  不见风雨不见你  阅读(172)  评论(0编辑  收藏  举报