作用域的定义

作用域是一个标识符在程序正文中有效的区域。

1.函数原型作用域

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

它是C++程序中最小的作用域。

例:

double area(double radius);

其中radius的有效范围就在area形参列表的左右括号之间,在程序的其他地方不能引用这个标识符。

2.局部作用域

void fun(int a)
{
int b=a;
cin>>b;
if(b>0)
{
int c;
......
}
}

其中a的作用域为整段程序,b、c的作用域从声明处开始,到其所在的块结束。块就是一对发括号所括起来的一段程序。

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

具有局部作用域的变量也称局部变量。

3.类作用域

一个类就是一个独立的作用域,在类外定义函数或静态变量需要加上类名和作用域符号。每个类的成员不同于任何其他类的成员。

在类作用域之外,成员只能通过对象或指针分别使用成员访问操作符,或使用-> 来访问(此处这篇博客里不详述)。

例:

void Complex::get() {
......
}

一般的数据或函数成员必须通过对象来访问。

4.命名空间作用域

什么是命名空间呢?一个大型程序通常由不同模块构成,不同模块中的类和函数可能发生重名,这样就会引发错误。

命名空间就是为了消除这样的错误而存在。

(1)命名空间分类:

系统命名空间: std
自定义的命名空间:

如:

namespace NS
{
......
}

一个命名空间确定了一个命名空间作用域,凡是在该命名空间之内声明的,都属于该命名空间作用域。

命名空间也允许嵌套。

如:

namespcace OuterNS{
namespace InnerNS{
{
class SomeClass{...};
}
}

若想引用SomeClass类,需要使用如下形式:

OuterNS::InnerNS::SomeClass

此外还有两类特殊的命名空间

全局命名空间和匿名命名空间

全局命名空间是默认的命名空间,在显式声明的命名空间之外声明的标识符都在一个全局命名空间中。

匿名命名空间是一个需要显式声明的没有名字的命名空间,声明方式如下:

namespace {
匿名命名空间内的各种声明(函数声明、类声明......
}

(2)命名空间的使用

使用命名空间:
①通过作用域符  空间名::空间成员
②声明命名空间: using namespace 命名空间 ;

(3)实例

# include < iostream>
using namespace std;
int i; //在全局命名空间中的全局变量
namespace Ns{
int j; //在Ns命名空间中的全局变量
}; int main() {
i=5; //为全局变量i赋值
Ns::j=6; //为全局变量j赋值
{ //子块1
using namespace Ns;//使得在当前块中可以直接引用Ns命名空间的标识符
int i; //局部变量,局部作用域
i= 7;
cout<<”i="<<i<<endl;//输出7
cout<<”j="<<j<<endl;//输出6
}
cout<<”i="<<i<<endl;//输出5
return 0;
} //运行结果:
//i=7
//j=6
//i=5

具有命名空间作用域的变量也称全局变量。

C++第三次作业:作用域的更多相关文章

  1. C++第三次作业--作用域

    作用域 任何一种语言最基本的部分就是变量,而变量有两个非常重要的特性,作用域和生存期. 定义 作用域是变量的一个属性,某个变量在代码中有效的区域为该变量的作用域. 函数原型作用域 函数声明参数从参数声 ...

  2. OO第三单元作业——魔教规格

    OO第三单元作业--魔教规格 JML的理论基础和相关工具   JML(Java Modeling Language,Java建模语言),在Java代码种增加了一些符号,这些符号用来标志一个方法是干什么 ...

  3. 耿丹CS16-2班第三次作业汇总

    -- Deadline: 2016-10-12 22:48 -- 作业内容: 1.实验2-6 猜数字游戏 2.实验2-7 判断能否为三角形 3.实验2-8 个人所得税计算器 -- 第三次作业总结: 1 ...

  4. JAVA第三周作业(从键盘输入若干数求和)

    JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...

  5. 第三次作业:caculator

    第三次作业 作业链接 ********* 遇到的问题: Scan类: 队列的使用方法不了解,上网查询并自己练习了一下才初步了解,才运用到作业 . 判断数字用的 if (input[i] >= ' ...

  6. HTML第三天作业做的表格

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  7. 第三次作业——《K米评测》

    第三次作业--<K米评测> 一.调研.评测 上手体验 APP的图标做的不错,一眼就知道和KTV唱歌相关的 点进去就是连接包箱的界面和直播界面,把软件最重要的两个功能展示出来了,一目了然 热 ...

  8. 软件工程(QLGY2015)第三次作业点评(含成绩)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...

  9. 第三次作业随笔(new)包含了补作业

    第三次作业的题目:http://www.cnblogs.com/fzuoop/p/5187275.html 第一次看到题目的时候觉得应该是挺简单的,只要把输入的那一串东西挨个判断,用数列的方法,如果碰 ...

  10. 第三周作业、实时操作系统µC/OS介绍及其它内容

    作业要求 见<实时控制软件设计>第三周作业 1 阅读笔记--µC/OS 1.1 基本介绍 µC/OS是由Micrium公司研发的实时操作系统,以µC/OS-II或µC/OS-III为内核, ...

随机推荐

  1. python3速查参考- python基础 2 -> if语句应用 + while循环应用

    if语句应用之——求最大值 """ 求三个数字中的最大值,并打印出来 """ a = int(input("a:")) ...

  2. Jmeter启动报错解决方案

    安装好jmeter之后在启动Jmeter的过程中出现了如下的报错信息(大部分的原因是配置不对): /usr/local/Cellar/jmeter/5.1.1/libexec/bin/jmeter: ...

  3. GAN(生成对抗网络)之keras实践

    GAN由论文<Ian Goodfellow et al., “Generative Adversarial Networks,” arXiv (2014)>提出. GAN与VAEs的区别 ...

  4. Leetcode之动态规划(DP)专题-123. 买卖股票的最佳时机 III(Best Time to Buy and Sell Stock III)

    Leetcode之动态规划(DP)专题-123. 买卖股票的最佳时机 III(Best Time to Buy and Sell Stock III) 股票问题: 121. 买卖股票的最佳时机 122 ...

  5. MySQL知识篇-SQL1

    1 SQL是什么? 答:是结构话语言,是一种操作关系型数据库的语言. 2 SQL语言分类? SQL语言 说明 举例 DDL 数据定义语言 create  drop DML 数据操作语言 insert ...

  6. 【计算机视觉】TPAMI的Editors

    写了一篇文章准备试试TPAMI,没指望中,就当听听意见也好,让选两个Editors (2 preferred editors required),于是调研了一下这些人都是做什么的,有同行路过请评价补充 ...

  7. pubwin扫描安装

    1,注意顺序 先安装一代 FS533 2,在安装精伦 3,在重新注册 PUBWIN 如果还不行一般是注册商没给注册好

  8. 利用pycharm 安装tushare(转) + dir(ts)

    1.在pycharm里,有安装组件的方法,进入 File - Setting - Project:StockMarket - Project InterPreter,在右边点击“+”,进入搜索页面,搜 ...

  9. jQuery之克隆事件--clone()与clone(true)区别

    clone()与clone(true)同为克隆 clone()表示复制标签本身, clone(true)会将标签绑定的事件一起复制 来看案例: <!DOCTYPE html> <ht ...

  10. ubuntu 设置静态ip,但显示scope global secondary ens33

    设置静态ip 修改 /etc/network/interfaces 文件 # The loopback network interface auto lo iface lo inet loopback ...