高程 | 数据的共享与保护(c++)
 
 文章目录
 - 📚标识符的作用域与可见性
-  
- 📚对象的生存期
-  
- 📚类的静态成员
-  
- 📚类的友元
- 📚共享数据的保护
  
 
📚标识符的作用域与可见性
 
🐇作用域
 
- 作用域是一个标识符在程序正文中有效的区域。
- ⭐️函数原型作用域 - 是C++程序中最小的作用域。
- 在函数原型声明时形参的作用范围就是函数原型的作用域。
- double area (double radius) //标识符radius的作用在area形参列表的左右括号之间。
 
- ⭐️局部作用域 - 函数形参列表中形参的作用域,从形参列表中的声明处开始,到整个函数体结束之处为止;
- 函数体内声明的变量,其作用域从声明处开始,一直到声明所在的块结束的大括号为止;
- 具有局部作用域的变量也称为局部变量。
 
- ⭐️类作用域 - 类可以被看成是一组有名成员的集合,类X的成员m具有类作用域,对m的访问方式有三种 - 如果X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可直接访问成员m;
- 通过表达式 x.m或X::m。这是程序中访问对象成员的最基本方法;
- 通过 ptr->m这样的表达式,其中ptr为指向X类的一个对象的指针。
 
 
- ⭐️命名空间作用域:具有命名空间作用域的变量也称全局变量。
🐇可见性
 
- 程序运行到某一点,能够引用到的标识符,就是该处可见的标识符。
- 可见性规则 - 声明在前,使用在后。
- 同一作用域中,不能声明同名的标识符。
- 在没有互相包含关系的不同作用域中声明的同名标识符互不影响。
- 在两个或多个具有包含关系的作用域中声明同名标识符,则外层标识符在内层不可见。
  
 
📚对象的生存期
 
🐇静态生存期
 
- 如果对象的生存期与程序运行期相同,则称它具有静态生存期。 - 在命名空间作用域中声明的对象都具有静态生存期。
- 如果要在函数内部作用域中声明具有静态生存期的对象要用关键字static。
- 局部作用域中静态变量特点:不会随着每次函数调用而产生一个副本,也不会随着函数返回而失效。
 
🐇动态生存期
 
- 除了上述两种情况,其余对象都具有动态生存期。
- 在局部作用域中声明具有动态生存期的对象,也称局部生存期对象。
- 局部生存期对象诞生于声明点,结束于声明所在的块执行完毕之时。
📚类的静态成员
 
- 类的静态成员用来解决一个类的不同对象之间数据和函数共享问题。
🐇静态数据成员
 
- 若某个属性为整个类所共有,不属于任何一个具体对象,则采用static关键字来声明为静态成员。
- 类属性是描述类的所有对象共同特征的一个数据项,对于任何对象实例,它的属性值是相同的。
- 静态数据成员具有静态生存期。
- 由于静态数据成员不属于任何一个对象,因此可通过类名对它进行访问,类名::标识符。
- 之所以类的静态数据成员需要在类定义之外再加定义,是因为需要以这种方式专门为它们分配空间。非静态数据成员无须以此方式定义,因为它们的空间是与它们所属对象的空间同时分配的。
🐇静态函数成员
 
- 使用static关键字声明的函数成员。
- 静态函数成员可以通过类名或对象名来调用,而非静态成员函数只能通过对象名来调用(一般习惯于通过类名调用。即使通过对象名调用,起作用的也只是对象的类型信息,与使用的具体对象无关)。
- 静态成员函数可以直接访问该类的静态数据和函数成员。而访问非静态成员,必须通过对象名。
📚类的友元
 
- 友元关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。
- 在一个类中,可以利用关键字friend将其他函数或类声明为友元。
- 如果友元是一般函数或类的成员函数,称为友元函数;如果友元是一个类,则称为友元类,友元类的所有成员函数都自动成为友元函数。
- 友元函数 - 是在类中用关键字friend修饰的非成员函数。
- 虽然不是本类的成员函数,但是在它的函数体中可以通过对象名访问类的私有和保护成员。
 
- 友元类 - 若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。
 
- ⚠️注意  
📚共享数据的保护
 
- 常对象 - 它的数据成员值在对象的整个生存期内不能被改变。即:常对象必须进行初始化,而且不能被更新。
- 声明常对象: const 类型说明符 对象名;
 
- 用const修饰的类成员 - ⭐️常成员函数:类型说明符 函数名 (参数表)const;- const是函数类型的一个组成部分,因此在函数的定义部分也要带const关键字。
- 如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其他函数。
- 无论是否通过常对象调用常成员函数,在常成员函数调用期间目的对象都被视为常对象,因此常成员函数不能更新目的对象的数据成员,也不能针对目的对象调用该类中没有用const修饰的成员函数。
  
 
- ⭐️常数据成员:构造函数对该数据成员进行初始化,就只能通过初始化列表。
- ⭐️常引用 - 在声明引用时用const修饰,常引用所引用的对象不能被更新。
- const 类型说明符 &引用名;
- 非const的引用只能绑定到普通对象;但常引用可以绑定到(非)常对象,无论绑定哪一种引用后只能把对象当常对象。
 
 
  
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/682879.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!