C++学习笔记(五):数据共享与保护

本文详细介绍了标识符的作用域,包括函数原型作用域、局部作用域、命名空间作用域,以及可见性的概念。接着讨论了对象的静态生存期和动态生存期。重点讲解了类的静态成员,包括静态数据成员和静态函数成员,以及它们在数据共享中的作用。此外,还提到了类的友元功能,包括友元函数和友元类,以及如何通过const修饰来保护共享数据,如常对象和常成员函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.1 标识符的作用域与可见性

作用域讨论的是标识符的有效范围,可见性讨论的是标识符是否可以被引用

5.1.1 作用域

作用域是一个标识符在程序正文中有效的区域,分为:函数作用域局部作用域(块作用域)类作用域命名空间作用域

函数原型作用域

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

局部作用域

具有局部作用域的变量称为局部变量

命名空间作用域

命名空间的语法形式如下:

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

在命名空间内部可以直接引用当前命名空间中声明的标识符,如果需要引用其他命名空间的标识符,需要使用以下语法:
命名空间::标识符名
有时,为了解决命名空间冗长的问题,可以使用以下两种using语句:

using 命名空间名::标识符名;
using namespace 命名空间名;

补充:using的三种用法
- 导入命名空间

- 指定别名
- 在派生类中引用基类成员

还有两类特殊命名空间:全局命名空间匿名命名空间。全局命名空间是默认的命名空间,在显示声明的命名空间之外声明的标识符都在一个全局命名空间中。匿名命名空间是一个需要显示声明的没有名字的命名空间,声明方式如下:
namespace {
匿名命名空间内的各种声明(函数声明、类声明、…)
}
具有命名空间作用域的变量称为全局变量。

5.1.2 可见性

程序运行到某一点,能够引用到的标识符,就是该处可见的标识符。有以下一般规则:

  • 标识符要声明在前,引用在后
  • 同一作用域,不能声明同名的标识符
  • 在没有互相包含关系的不同作用域中声明的同名标识符,互不影响
  • 如果在两个或多个具有包含关系的作用域中声明了同名标识符,责外层标识符在内层不可见

5.2 对象生存期

对象从诞生到结束的这段时间叫做他的生存期。生存期内,对象将保持它的状态(即数据成员的值),变量也将保持它的值不变,直到被更新为止。

5.2.1 静态生存期

如果对象的生存期与程序的运行期相同,则称它具有静态生存期
以下两种情况对象具有静态生存期:

  • 在命名空间作用域中声明的对象
  • 在函数内部的局部作用域声明,且使用关键字static

定义时未指定初值的基本类型静态生存期变量,会被赋予0值初始化,而对于动态生存期变量,不指定初值意味着初值不确定

5.2.2 动态生存期

除了静态生存期对象,其余都是动态生存期对象。

5.3 类的静态成员

5.3.1 静态数据成员

区分面向对象方法中实例属性类属性
如果某个属性为整个类所共有,不属于任何一个具体对象,则采用static关键字声明为静态成员。静态成员在每个类只有一个副本,由该类的所有对象共同维护和使用,从而实现同一个类的不同对象之间的数据共享。类属性是描述类的所有对象共同特征的一个数据项,对于任何对象实例,它的属性值是相同的。
静态数据成员具有静态生存期。由于静态数据成员不属于任何一个对象,因此可以通过类名对它进行访问,一般用法是“类名::标识符”。在类的定义中仅对静态数据成员进行引用性声明,必须在命名空间作用域的某个地方使用类名限定定义性声明,这时也可以初始化

5.3.2 静态函数成员

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

5.4 类的友元

5.4.1 友元函数
5.4.2 友元类

5.5 共享数据的保护

5.5.1 常对象

常对象:数据成员值在对象整个生存期间内不能被改变的对象。常对象必须被初始化,而且不能被更新。
注意:在定义一个变量或常量时为它指定初值叫做初始化,而在定义一个变量或常量以后使用赋值运算符修改它的值叫做赋值

5.5.2 用const修饰的类成员
  1. 常成员函数
  2. 常数据成员
    构造函数对常数据成员进行初始化,只能通过初始化列表方式
  3. 常引用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值