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变量,而这些变量的作用于就在类中,如果我们想要在类的外面引用这些变量的话那么要先加上”类名::“进入这个类从而才能访问这个类的成员如果我们直接访问的话就会出现如下现象

1785040-20190924164625975-1568169771.png

因为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

1785040-20190924164642002-2115725018.png

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

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

转载于:https://www.cnblogs.com/bjfybjn/p/11579207.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值