2020年9月C++笔试准备(五)

第五章 数据的共享与保护
  1. 作用域

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

局部作用域: 函数形参列表中形参的作用域,从形参列表中的声明处开始,到整个函数结束之处为止。
函数体内声明的变量,其作用域从声明处开始,一直到声明所在的块结束的大括号为止。
具有局部作用域的变量也称为局部变量。

类作用域: 类可以被看作是一组有名成员的集合,类X的成员m具有类作用域。

命名空间作用域: 消除同名歧义,一个命名空间确定了一个命名空间作用域

全局命名空间是默认的命名空间,在显式声明的命名空间之外声明的标识符都在一个全局命名空间中。
匿名命名空间是一个需要显式声明的没有名字的命名空间。
具有命名空间作用域的变量也称为全局变量。

  1. 对象的生存期

静态生存期: 如果对象的生存期与程序的运行期相同,则称它具有静态生存期。
在命名空间作用域中声明的对象都是具有静态生存期的。
关键字static可以在函数内部的局部作用域中声明具有静态生存期的对象。
静态变量,不会随着每次函数调用而产生一个副本,也不会随着函数返回而失效,该变量会在每次调用间共享。
未指定初值的基本类型静态生存期变量,会被赋予0值初始化。

动态生存期:

  1. 类的静态成员

作用: 静态成员是解决同一个类的不同对象之间数据和函数共享问题的。

**注:**在类的定义中仅仅对静态数据成员进行引用性声明,必须在命名空间作用域的摸个地方使用类名限定定义性声明,这时也可以进行初始化。

静态数据成员函数可以直接访问该类的静态数据和函数成员。
而访问非静态成员,必须通过对象名。

  1. 类的友元

友元关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。
如果A类是B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。
注意:
友元关系是不能传递的;
友元关系是单向的;
友元关系是不被继承的。

  1. 常对象

它的数据成员值在对象的整个生存期内不能被改变。(常对象必须进行初始化,而且不能被更新)

const   类型说明符   对象名;

不能通过常对象调用普通的成员函数。

  1. 常成员函数

声明格式:

类型说明符   函数名(参数表)  const

在函数的声明和定义时都要带const关键字;
常对象只能调用它的常成员函数;
常成员函数不能更新目的对象的数据成员;
const可以用于对重载函数的区分。

  1. 常数据成员

如果在一个类中说明了常数据成员,那么任何函数中都不能对该成员赋值。
构造函数中对它赋值只能通过初始化列表。

  1. 常引用

常引用所引用的对象不能被更新。

const   类型说明符   &引用名

非const的引用只能绑定到普通的对象,而不能绑定到常对象

  1. 外部变量

如果一个变量除了在定义它的源文件中可以使用外,还能被其他文件使用,那么就称它为外部变量。

命名空间作用域中定义的变量,默认情况下都是外部变量,但是在其他文件中如果需要使用这一变量,需要使用extern关键字 加以声明。

  1. 外部函数

在所有类之外声明的函数,具有命名空间作用域,若没有特殊说明,这样的函数都可以在不同的编译单元中被调用,只要在调用之前进行引用性声明(即声明函数原型)即可。

  1. 将变量和函数限制在编译单元内

static关键字用来修饰命名空间作用域的变量或函数时,和extern关键字起相反的作用,他会使得被static修饰的变量和函数无法被其他编译单元引用。

注: static关键字在用在局部作用域、类作用域、命名空间作用域时具有不尽相同的作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值