第5章:作用域与可见性

5.1 作用域与可见性

定义

(1)作用域:是标识符的有效范围;

(2)可见性:标识符是否可以引用


源由


用法


简单例子


详解

1、函数原型的作用域:其作用域始于"(",结束于")";

2、块作用域:块是一对花括号括起来的一段程序单元;其块中声明的标识符,其作用域从声明处开始,直到块结束的右花括号;

3、类作用域:可以将类看成是一组有名成员的集合,除个别例外,类作用域作用于特定的成员名,类及其对象有特殊的访问和作用域规则;

如:类X的一个成员M,在X的任何一个没有重新声明变量M的函数成员中,都可以访问到M

4、文件的可见性:理解为全局变量就行,在整个文件中都起作用;

4、作用域可见性的一般规则:

(1)标识符应声明在先,引用在后;

(2)在同一作用域中,不能声明同名的标识符;

(3)如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见;

(4)对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见;


进阶例子收集

5.2 对象的生存期

定义

对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值,直到被更新为止;


源由


用法


简单例子


详解

1、静态生存期:生存期与程序的运行期相同,用关键字static表示;

2、


进阶例子收集

5.3 数据与函数

定义

数据+算法=程序设计

数据结构+算法=对象

数据与函数:

(1)函数对数据的访问权限;

(2)函数之间的数据共享以及对共享数据的保护;


源由


用法


简单例子


详解

1、局部变量:数据存储在局部对象中,通过参数传递实现共享

(1)在函数内部定义的变量

(2)auto可省,在栈中分配;

(3)只在本函数中使用

(4)不初始化,则为任意值;

2、全局变量:全局变量通常在程序顶部定义,一旦定义在程序的每个函数中是可见的;也可以在程序中间的任何地方定义,但之前定义的函数都访问不了该变量;

全局变量可以是各个函数都可以访问的变量,但其可能造成结构不清晰,应尽量少用;

3、数据成员:将数据和使用数据的函灵敏封装在类中;

5.4 静态成员

定义


源由


用法


简单例子


详解

1、静态成员:类里面的成员变量为static

2、静态函数成员

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

静态成员函数只能引用属于该类的静态数据成员或静态成员函数

该类的所有对象维护该成员的同一个拷贝;

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

类外代码可以使用类名和作用域操作符或者对象名来调用静态成员函数;


进阶例子收集

5.5 共享数据的保护

定义

(1)常类型:常类型的对象必须进行初始化,而且不能被更新;包括:

常引用:const 类型说明符 &引用名

常对象:类名 const 对象名

常数据:类型说明符 const 数组名[大小]

常指针:const 类型说明符 *指针名;

2、常成员函数

使用const关键字说明的函数;

常成员函数不更新对象的数据成员;

格式:类型说明符 函数名(参数表) const;

3、常数据成员:使用const说明的数据成员;


源由


用法


简单例子


详解


进阶例子收集

5.6 友元

定义

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

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

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


源由


用法


简单例子


详解

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

2、注意:

(1)友元关系是不能传递的,B类是A类的友元,C类是B类的友元,但C类下A类没有友元关系

(2)元友关系是单向的:B类是A类的友元,B类的成员可以访问A类的所有成员,但A类不能


进阶例子收集

发布了113 篇原创文章 · 获赞 6 · 访问量 4025

猜你喜欢

转载自blog.csdn.net/Liyunhao_haoge/article/details/103935365
今日推荐