C++57个入门知识点_09_ 作用域与数据隐藏(作用域的分类、数据隐藏、不同作用域中定义了相同名称的变量,其值不是覆盖,而是存储在不同的地址下,根据作用域(从内->外)查找使用、2.1例子)

C语言中我们也是接触过作用域的,例如在函数内部就是函数的作用域,C++中丰富了作用域的内容。
总结:
1.C++中作用域主要划分为下:

  • 全局作用域 名字空间域(namespace)
  • 局部作用域即块作用域(函数内部或代码块)
  • 类域(class)
    作用域的作用:某一个对象或者变量只在其作用域内起作用

2.数字隐藏:不同作用域中定义了相同名称的变量,其值不是覆盖,而是存储在不同的地址下,根据作用域查找使用

  • 在不同的作用域可以定义多个相同名字的变量
  • 内部的变量会隐藏外部的变量,(从内->外查找)当局部未定义,向上就近使用同名变量
    不是刻意写出来的,可能会带来隐患

1. 不同作用域下,变量值的变化

先看一段代码,在main()的内外都定义了n,这样会不会有问题呢?

#include <iostream>

int n = 6;
int main(int argc, char* argv[])
{
	int n = 5;
	return 0;
}

运行结果:此时n的值未赋值(可能是由于同时定义,不知道如何取值),进入函数作用域完成赋值后,n=5
在这里插入图片描述
将main函数中的n注释之后,n在同样的位置,值为6
在这里插入图片描述
我们知道n在程序中存在于两个作用域,一个是main函数,一个是全局作用域。

#include <iostream>

int n = 6;//全局变量,全局域

int main(int argc, char* argv[])
{
	int n = 5;//main函数的局部变量,局部作用域

	//块作用域
	{
		int n = 7;
	}

	return 0;
}

运行过程中n值的变化
在这里插入图片描述

2. 作用域影响下的数据隐藏

数据隐藏:在不同的作用域可以定义多个相同名字的变量

2.1 数据隐藏的本质

不同作用域中定义了相同名称的变量,其值不是覆盖,而是存储在不同的地址下,根据作用域查找使用

#include <iostream>

int n = 6;//全局变量,全局域

int main(int argc, char* argv[])
{
	int n = 5;//main函数的局部变量,局部作用域

	//块作用域
	{
		int n = 7;
		printf("%d", n);
	}

	return 0;
}

运行结果:
在这里插入图片描述

2.2 变量的查找规则

内部的变量会隐藏外部的变量,(从内->外查找)当局部未定义,向上就近使用同名变量

#include <iostream>

int n = 6;//全局变量,全局域

int main(int argc, char* argv[])
{
	int n = 5;//main函数的局部变量,局部作用域

	//块作用域
	{
		//int n = 7;
		printf("%d", n);
	}

	return 0;
}

在这里插入图片描述

#include <iostream>

int n = 6;//全局变量,全局域

int main(int argc, char* argv[])
{
	//int n = 5;//main函数的局部变量,局部作用域

	//块作用域
	{
		//int n = 7;
		printf("%d", n);
	}

	return 0;
}

在这里插入图片描述

3. 学习视频地址:C++57个入门知识点_09_ 作用域与数据隐藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月旧城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值