标识符的作用域
发布时间:2020-12-16 09:11:35 所属栏目:百科 来源:网络整理
导读:标识符的作用域 “作用域是一个标识符在程序正文中有效的区域”——来自教材《C++语言程序设计》 一、函数原型作用域 “在函数原型声明时形式参数的作用范围就是函数原型作用域。” 函数的形参的标识符只在这个函数中有效,另外,函数中的声明的变量的标识符
标识符的作用域“作用域是一个标识符在程序正文中有效的区域”——来自教材《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; } 运行截图: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |