作用域

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

定义

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


函数原型作用域

函数声明参数从参数声明开始到函数声明结束。此作用域为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. Python multiprocess模块(中)

    主要内容: 一. 锁 二. 信号量 三. 事件 通过event来完成红绿灯模型 四. 队列(重点) 队列实现进程间的通信 五. 生产者消费者模型 1. 初始版本(程序会阻塞住) 2. 升级版本一(通过 ...

  2. springboot-RequestMappingHandlerMapping

    作用:查看应用请求对应的ur和方法l情况 实例: RequestMappingHandlerMapping mapping =applicationContext.getBean("requ ...

  3. Spring Cloud health节点通过注册中心扫描状态的简单实现

    package com.zjs.web; import com.netflix.appinfo.InstanceInfo; import com.zjs.FallbackApiApplication; ...

  4. layui checkbox , radio 清除所有选中项

    方法: $(selector).prop('cjecked', false); form.render(); 使用示例: // 清除radio选中 $('input[name=ymd]').prop( ...

  5. [bzoj2597][Wc2007]剪刀石头布_费用流

    [Wc2007]剪刀石头布 题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=2597 题解: 发现直接求三元环不好求,我们考虑任选三个点不是 ...

  6. setsockopt用法详解

    最近做的一个程序用到了IOCP通信模型,里面用到了setsockopt对套接字进行设置,看源代码的时候最setsockopt函数很不理解,看了msdn以后还是不太明白这个函数的用法,于是就到网上找了一 ...

  7. ES-基本概念

    目录: 1.  ElasticSearch是什么 2. 基本概念 3. 几个关键词   正文: 1.  ElasticSearch是什么     ElasticSearch是一个基于Lucene的搜索 ...

  8. package[golang]学习笔记之context

    *关于context https://talks.golang.org/2014/gotham-context.slide#29

  9. 牛客 109B 好位置 (字符串水题)

    大意: 给定字符串$s1,s2$, 对于$s1$中所有与$s2$相等的子序列$t$, $t$在$s1$中的下标定义为好位置. 求$s1$是否所有位置都是好位置. 显然$s1$的前缀要与$s2$相等, ...

  10. CVPR2019目标检测方法进展综述

    CVPR2019目标检测方法进展综述 置顶 2019年03月20日 14:14:04 SIGAI_csdn 阅读数 5869更多 分类专栏: 机器学习 人工智能 AI SIGAI   版权声明:本文为 ...