作用域

任何一种语言最基本的部分就是变量,而变量有两个非常重要的特性,作用域和生存期。

定义

作用域是变量的一个属性,某个变量在代码中有效的区域为该变量的作用域。


函数原型作用域

函数声明参数从参数声明开始到函数声明结束。此作用域为c++程序中最小的作用域,生存周期最短。

例:int func(int i) i为参数,作用域类型为函数原型类型。

const int n=;

int f(int n,int m = n);   //error,n referrence to (int n) not (const int n)

函数作用域

函数的作用域相当于编译器划分给的函数的一段时间上与物理内存上的区域。在这段时间内,函数内定义的局部变量存在,过了这段时间,这个变量就不存在。同样,在这段内存中的变量是被该函数独享的,外部不能访问。

#include <iostream>
using namespace std; int main ()
{
// 局部变量声明
int a, b;
int c; // 实际初始化
a = ;
b = ;
c = a + b; cout << c; return ;
}

结果:30

命名空间作用域

在源程序中,其实,全局作用域也是一个命名空间,全局命名空间中变量的作用域从声明开始,到编译单元中断,在连接的时候,又将多个编译单元的全局命名空间连接在一起。
命名空间的变量的作用域:
从声明开始,到该命名空间结束中断,在新的一段同名命名空间开始继续开始。在使用using的地方,将该部分加入到作用域中。命名空间的子命名空间也包含其中。匿名命名空间和inline命名空间变量的作用域包含其父亲命名空间。

namespace A
{ //Scope of A begins
int a1=; //Scope of a1 begins
inline namespace B
{ //Scope of B begins
int a2; //Scope of a2 begins
}
namespace C
{ //Scope of C begins
int a3=; //scope of a3 begins
int f()
{
cout<<a1<<endl;
}
} //scope of a3 ends
namespace
{
int a4; //scope of a4 begins
} //int a2; //error: duplicate defination a2
} //scope of a1,a2,B,C,a4 interrupted
namespace A
{
//scope of a1,a2,B,C,a4 continue
}

类作用域

类中的数据和函数分为公有类(public),保护类(protected),私有类(private),
类公有派生类,保护派生类,私有派生类
类中的成员 在public中 ,可以在其他地方直接使用  使用方法:对象.公用类成员(对象::公用类成员)
而其他的需要借助公有类函数调用 ,但是在类中可以直接调用 。

class中的变量的作用域为:

  • 从声明开始,到class结束
  • 所有的类中成员函数的函数体中,不管是在声明之前,或者是在class之外
  • 函数的默认参数中
  • 所有嵌套在函数中的成员

例:

class X
{
int f(int a = n)
{ // X::n is in scope inside default parameter
return a*n; // X::n is in scope inside function body
}
int g();
int i = n*; // X::n is in scope inside initializer
// int x[n]; // Error: n is not in scope in class body
static const int n = ;
int x[n]; // OK: n is now in scope in class body
};
int X::g() { return n; } // X::n is in scope in out-of-class member function body

访问类中成员的方法有以下四种:

  • 在class的作用域中,或子类的作用域中
  • class或者子类的对象使用’.‘
  • class或者子类对象的指针,使用'->'
  • class 或者子类使用'::'

枚举作用域

枚举有两种类型: scoped enumeration and unscoped enumeration这两种类型的作用域是不同的。scoped enumeration: 作用域从变量声明开始,到enumeration结束为止。
unscoped enumeration: 作用域从变量声明开始,到enumeration结束,继续存在,直到全局作用域结束。

enum e1{

    A,

    B

};

enum class e2{

    A2,

    B2

};

e1 o1 = B;

//e2 o2 = B2;    //error : B2 not in scope

e2 o2 = e2::B2;

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

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

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

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

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

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

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

  4. 第三次作业:caculator

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 连载二:RobotFramework+Svn+Jenkins集成测试

    使用SVN和Jenkins完成脚本的持续集成测试 目标: 1)使用svn管理脚本: 2)使用jenkins执行脚本: 3)在jenkins中配置svn自动获取最新的脚本执行: 步骤: (1)安装Jen ...

  2. html5 iphone input 输入法 弹窗将页面顶起 解决办法

    给 input 添加失焦事件,然后滚动视图 input.search(type="text",@blur="scrollTop") scrollTop(){ w ...

  3. CentOS下安装Docker CE教程

    一.安装前准备 1.硬件要求 CentOS 7(64-bit),内核版本不能低于3.10: CentOS 6.5(64-bit或更新的版本),内核版本为 2.6.32-431 或者更高版本,一般不建议 ...

  4. android#编写一个聊天界面

    摘自<第一行代码>——郭霖 既然是要编写一个聊天界面,那就肯定要有收到的消息和发出的消息.上一节中我们制作的message_left.9.png可以作为收到消息的背景图,那么毫无疑问你还需 ...

  5. python基础学习19,01

    听说python入门很容易,所以想试试对我这个零基础会不会很友好呢.做随笔也顺便督促自己不要轻易放弃学习. #登录接口 print("请输入用户名密码") _username = ...

  6. 无监督异常检测之LSTM组成的AE

    我本来就是处理时间序列异常检测的,之前用了全连接层以及CNN层组成的AE去拟合原始时间序列,发现效果不佳.当利用LSTM组成AE去拟合时间序列时发现,拟合的效果很好.但是,利用重构误差去做异常检测这条 ...

  7. 【miscellaneous】多播(组播)原理分析

    为什么要使用多播:        网卡从网络上接收到目标物理地址对应的所有bit位都为1的数据报时,会收到这条消息并将其上传给驱动程序,网卡的这种工作模式称为广播模式,网卡的缺省工作模式包含直接模式和 ...

  8. 解决使用wamp怎么使用php命令行

    用了wamp,把php加到环境变量就报错啊! 那怎么用命令行啊! 可以找么着:(比如想执行 php think build --module demo) E:\php-project\tp5.> ...

  9. 剑指offer_斐波那契数列

    package solution; public class Fibonacci { /* * f(n) = f(n-1) + f(n-2) n>1 * f(0) = 0 * f(1) = 1 ...

  10. prometheus 监控 jar应用服务 + 修改监听IP和端口

    1.修改服务的启动脚本 [root@do1cloud01 init.d]# vim learn-school nohup ${JAVA_HOME}/bin/java -javaagent:/usr/l ...