C++基础之数据的共享和保护

.标识符的作用域和可见性
作用域分类:
1.函数原型作用域
2. 局部作用域
3. 类作用域
4. 文件作用域
5. 命名空间作用域
2. 函数原形作用域
形参作用域,参数括号内,很小,可以不写形参名,只写类型
double area(double radius);
3. 局部作用域
函数的形参、在快中的标识符
作用域自声明起,限于块中
类成员具有类作用域
其范围包括类体和成员函数体
在类作用域外访问类的成员:

  1. 静态成员:通过类名,或者该类的对象名、对象引用访问
  2. 非静态成员:通过类名,或者该类的对象名、对象引用、对象指针访问
    4、 文件作用域
    不在前述各个作用域中出现的声明,就具有文件作用域
    其作用域开始于声明点,结束于文件尾
    5.可见性
    如果某个标识符在外层中声明,且在内层中如果没有同一标识符的声明,则该标识符在内层可见。
    对于两个嵌套的作用域,如果在内层作用域中声明了与外层作用域同名的标识符,则外层作用域的标识符在内层中不可见。

对象的生存期

静态生存期
这种生存期与程序的运行期相同。

在文件作用域中声明的对象具有这种生存期。

在函数内部声明静态生存期对象,要冠以关键字static ,默认初始化为0,不消亡

动态生存期
块作用域中声明的,没有用static修饰的对象是动态生存期的对象(习惯称局部生存期对象)。

开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。

静态数据成员

n 用关键字static声明

n 为该类的所有对象共享,静态数据成员具有静态生存期。

n 必须在类外定义和初始化,用(::)来指明所属的类。

静态函数成员
什么是作用域?

静态函数成员

l类外代码可以使用类名和作用域操作符来调用静态成员函数。

l静态成员函数主要用于处理该类的静态数据成员,可以直接调用静态成员函数。

l如果访问非静态成员,要通过对象来访问。
类的友元

友元是C++提供的一种破坏数据封装和数据隐藏的机制。

通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息。

可以使用友元函数和友元类。

为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元。

友元函数
友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和 protected成员

作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。

访问对象中的成员必须通过对象名。
友元类
若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员。

声明语法:将友元类名在另一个类中使用friend修饰说明。
类的友元关系是单向的
如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有、保护数据。

共享数据的保护

l 对于既需要共享、又需要防止改变的数据应该声明为常类型(用const进行修饰)。

l 对于不改变对象状态的成员函数应该声明为常函数。

常类型

l 常对象:必须进行初始化,不能被更新。

n const 类名 对象名

l 常成员

n 用const进行修饰的类成员:常数据成员和常函数成员

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

n const 类型说明符 &引用名

l 常数组:数组元素不能被更新(详见第6章)。

n 类型说明符 const 数组名[大小]…

l 常指针:指向常量的指针(详见第6章)。

常对象

l 用const修饰的对象

常引用

l 如果在声明引用时用const修饰,被声明的引用就是常引用。

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

l 如果用常引用做形参,便不会意外地发生对实参的更改。常引用的声明形式如下:

n const 类型说明符 &引用名;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值