zoukankan      html  css  js  c++  java
  • 标识符的作用域

    标识符的作用域

    “作用域是一个标识符在程序正文中有效的区域”——来自教材《C++语言程序设计》

    一、函数原型作用域

    “在函数原型声明时形式参数的作用范围就是函数原型作用域。”

    函数的形参的标识符只在这个函数中有效,另外,函数中的声明的变量的标识符也只在该函数中生效。当在函数以外的地方使用这些标识符时(如果在这些地方没有声明过这些变量),编译器就会报错。

    实验1:在函数内声明一些变量,在函数外使用,然后观察编译器的反应,以及如何解决。

    在这里插入图片描述

    要在这些地方使用相同的标识符时,就需要再次对这些标识符进行声明。

    在这里插入图片描述

    对主函数中标识符进行重新声明后,运行成功:
    在这里插入图片描述

    二、局部作用域(块作用域)

    在块里面声明的变量,其作用域从声明处开始,一直到声明所在的块结束的大括号为止。

    实验2:在块外面声明变量,然后再在块里面声明同样标识符的变量,并分别在块内和块外使用cout语句将变量的值输出到屏幕,查看结果,并尝试去查找原因。

    #define _CRT_SECURE_NOWARNINGS
    #include<iostream>
    using namespace std;
    int main()
    {
     int flag=1;
     int i = 2;
     int j = 3;
     if (1)
     {
      int flag = 78;
      cout << "块内flag=" << flag << endl;
      if (1)
      {
       int i = 28;
       cout << "块内i="<<i << endl;
       if (1)
       {
        int j = 45;
        cout << "块内j=" << j << endl;
       }
       cout << "块外j=" << j << endl;
      }
      cout << "块外i=" << i << endl;
     }
     cout << "块外flag=" <<flag<<endl;
     system("pause");
     return 0;
    }
    

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

    实验表明,在块内声明的标识符的作用域是从该标识符的声明处开始,到块结束为止,如果有相同的标识符的作用域将该块包含在内,在块内使用的依旧是在块内的声明的标识符。

    三、类作用域

    “类可以被看成是一组有名成员的集合,类X的成员m具有类作用域,对m的访问方式有如下三种:

    (1)如果在X的成员函数中内没有声明同名的局部作用域标识符,那么在该函数内可以直接访问成员m。

    (2)通过表达式x.m或者x::m。这正是程序中访问对象成员的最基本方法。

    (3)通过ptr->m这样的表达式,其中ptr为指向X类的一个对象的指针。”

    实验3:写一个名为Circle的类,有成员R,一个计算面积的成员函数,一个构造函数。

    
    #define _CRT_SECURE_NOWARNINGS
    #include<iostream>
    using namespace std;
    #define Pi 3.14
    class Circle {
    public:
     Circle(float R)
     {
      radius = R;
     }
     double getArea()
     {
      return Pi * radius * radius;
     }
    private:
     float radius;
    };
    int main()
    {
     float R;
     cout << "请输入圆的半径" << endl;
     cin >> R;
     Circle MyCircle(R);
     cout << "该圆的面积为" << MyCircle.getArea() << endl;
     system("pause");
     return 0;
    }
    

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

    四、命名空间作用域

    “一个命名空间确定了一个命名空间作用域,凡是在该命名空间之内声明的、不属于前面所述各个作用域的标识符,都属于该命名空间作用域。”

    我们经常使用的cout、cin语句就是来自于命名空间std,我们在使用这些语句之前需要使用以下语句:

    using namespace std;
    

    实验4:将一个类的声明写在一个命名空间里,并将这个命名空间写在一个头文件中,并在主函数中对其中的标识符进行操作。

    myspace.h

    //myspace.h
    #define Pi 3.14
    namespace myspace
    {
     class Circle {
     public:
      Circle(float R);
      double getArea();
     private:
      float radius;
     };
    }
    
    

    类的函数.cpp

    //类的函数.cpp
    #include"myspace.h"
    using namespace myspace;
    Circle::Circle(float R)
    {
     radius = R;
    }
    double Circle::getArea()
    {
     return radius * radius*Pi;
    }
    

    源.cpp

    // 源.cpp
    #define _CRT_SECURE_NOWARNINGS
    #include<iostream>
    #include"myspace.h"
    using namespace std;
    using namespace myspace;
    int main()
    {
     Circle circle(1);
     cout << "圆的面积为:" << circle.getArea()<<endl;;
     system("pause");
     return 0;
    }
    

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

  • 相关阅读:
    界面开发注意要素,降低界面BUG
    软件测试及其重要性
    浅谈自动化测试工具之Selenium
    浅谈探索式软件测试
    浅谈功能测试流程
    关于软件测试中测试用例的重要性
    第1章 性能测试整体认知
    数据库对比,优化
    2、补充介绍
    1、MarkDown基本语法
  • 原文地址:https://www.cnblogs.com/TracerLyh/p/11597675.html
Copyright © 2011-2022 走看看