C_PlusPlus学习笔记 - 4_C++程序结构 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)

4——C++程序结构
C++适合于编写大型的程序,是因为其 数据的共享与保护机制 。。。

标识符的作用域和可见性
作用域讨论的是标识符的有效范围,
可见性是讨论标识符是否可以被引用。(两者相互联系但又有区别)
作用域是一个标识符在程序正文中有效的区域。
1. 函数原型作用域, 2. 块作用域, 3. 类作用域, 4. 文件作用域
1. 函数原型作用域:
是C++中最小的作用域。
2. 块作用域成为局部变量
3. 类作用域
4. 文件作用域:文件声明处到文件结尾。全局变量。

可见性:
程序运行到某一点,能够引用到的标识符就是该处可见的标识符。

对象的生存期
对象从诞生到消失的时刻。。。
静态生存期:对象的生存期与程序的运行期相同。在文件作用域中声明的对象都具有静态生存期。(static)
动态生存期:诞生于声明点,结束于该标识符的结束处。

类的静态成员
静态成员是解决同一个类的不同对象之间数据和函数共享问题。
静态数据成员:
实例属性:每一个对象的值都不一样。
类属性:某个属性属于某个类所共有 ,不属于任何一个具体对象,则采用static声明为静态成员。静态成员每个类只有一个copy,由该类的对象共同维护和使用。从而实现了同一类的不同对象之间的数据共享。
类属性是描述类的所有对象共同特征的一个数据项,对于任何对象实例,其属性值是相同的。
静态函数成员:
静态成员函数可以直接访问该类的静态数据和函数成员。而访问非静态数据成员必须通过参数传递方式得到对象名,然后通过对象名访问。
通过静态函数访问非静态成员相当麻烦,一般情况下,它主要用来访问同一个类中的静态数据成员,维护对象之间共享的数据。
如果通过非静态成员函数来访问静态数据成员,应该使用非内联函数,而且访问静态数据成员的函数,其函数体的定义应该与静态成员的初始化写在同一个源程序文件中。因为访问静态成员之前,静态成员必须初始化。

类的友元
将数据与处理数据的函数封装在一起,构成类,即实现了数据的共享和隐藏,是一大优点,但是也同时是一个弱点。
友元关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间数据共享的机制。
通俗的讲,友元关系就是一个类主动声明哪些其他类或者函数是他的朋友,进而对它们提供对本类的访问特许。通过友元关系,一个普通的函数或者类的成员函数可以访问封装于另外一个类的数据。
从一定程度上讲,友元是对数据隐蔽和封装的破坏。

友元函数
friend修饰的非成员函数。
友元函数可以是一个普通的函数,也可以是其他类的成员函数。

友元类
若A类为B类的友元类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有成员。
1. 友元是不能传递的
2. 友元是单向的
3. 友元关系是不被继承的

共享数据的保护
各种形式的共享破坏了数据的安全。因此, 对于既需要共享,又需要防止改变的数据声明为常量 。因为常量在程序运行期间是不可改变的,所以可以有效的保护数据。
常引用:
常引用所引用的对象不能被更新。
常对象:
常对象,其数据成员值在对象的整个生存期间内不能改变,常对象必须进行初始化,而且不能被更新。

用const修饰的类成员
常成员函数:
int print() const;
1 .const是函数的一部分,在定义部分也得带const关键字
2. 常成员函数不能更新对象的数据成员,也不能用该类没有用const修饰的成员函数。
3. 如果将一个对象说明为常对象,则该常对象只能通过调用它的常成员函数,而不能调用其他成员函数。
4. const关键字可以用于重载。

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

多文件结构和编译预处理命令
多文件
1. 头文件,2. 实现文件, 3. 主函数文件
每个源程序文件称为一个编译单元。
#include<> 与 include ""的区别:
前者按标准方式搜索,而后者表示首先在当前目录下搜索要嵌入的头文件,如果没有,则按照标准方式搜索。
一个内联函数,需要在每个调用它的编译单元中给出一个完整一致的实现,比较好的是放在头文件中。

外部变量和外部函数
外部变量时可以被多个文件共享的全局变量。
外部变量可以用extern在多处声明,但是对变量的定义和初始化只能是唯一的。
定义一个文件作用域的变量时,其默认状态可以为不同的编译单元所共享,只要加上extern声明。
但是如果在文件作用域中定义变量时以static修饰,则该变量的作用范围仅限定于定义它的编译单元,而其他的编译单元不能访问。

外部函数:
在所有类之外声明的函数,都具有文件作用域。可以在不同的编译单元使用,加上extern修饰。

标准C++库
1. I/O 类
2. 容器类与ADT
3. 存储管理类
4. 算法
5. 错误处理
6. 运行环境支持

条件编译指令
使用条件编译指令,可以限定程序中的某些内容在满足一定条件时才参与编译。

C++中,数据的共享和保护机制是一个很重要的特性,包含的内容主要为标识符的作用域,可见性,生存期,通过类的静态成员实现同一个类的不同对象之间的数据和操作的共享,通过常成员来设置成员的保护属性。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值