实验一 词法分析程序设计_C++复习知识点总结(一)

a3481f38d2d18952e6db89e8204cb088.png

基于马光志老师编著的《C++程序设计实践教程》。其他章节待更....


C++复习笔记:

第零章:宏论面向对象的程序设计

面向对象的核心:封装(Encapsulation) 继承 (Inheritance ) 多态(Polymorphism)

封装(Encapsulation) :将对象的特征和行为包装在一起

  1. 特征描述:对象的“组织结构” 数据成员
  2. 行为描述:对象的 “功能” 函数成员
  3. 封装定义了对象的边界
  4. 提供了外部访问的接口
  5. 屏蔽了对象内部的特征、行为细节
  6. 不同的对象中,可以有同名的函数

继承 (Inheritance ) :一个对象获得另一个或多个对象的特征和行为

多态(Polymorphism):调用同名函数,表现出的不同行为

  1. 静态多态:编译时明确了同名函数中的哪一个(重载、重载函数)
//实现两个数相加返回结果的加法函数 
int fadd(int x, int y);
double fadd(double x, double y); 
void fadd(int *z, int x, int y);
int x,y,z; double u,v,w; z=fadd(x,y);
w=fadd(u,v);
fadd(&z, x,y);

2.动态多态:运行时才确定调用同名函数中的哪一个(多态、虚函数)

//水果店卖水果
APPLE a; PEAR p; BANANA b; FRUIT *q;
q=&a; or q=&p; or q=&b; q->BuyFruit();

C++编译器的换名机制---区分参数个数不同或者参数类型不同的函数, 若只是返回值类型不同,则不能区分

9f6c0e41ceadd02927615cb8471c8d21.png

关于程序的运行效率:

 //运行速度 高效性 int a[10000][40000]; 将所有元素都置为0
for (i = 0;i < 10000;i++) for (j = 0;j < 40000;j++)
a[i][j] = 0;// 方法1
for (j = 0;j < 40000;j++) for (i = 0;i < 10000;i++)
a[i][j] = 0;// 方法2
 
 memset(a, 0, sizeof(int)*10000 * 40000); // 方法3

第一章:引论

编译过程:

1) 预 处 理:#define、#include...宏替换。

//eg:
#include <stdio.h>
#define MAX_SIZE 10
...

2) 词法分析:产生一个程序的单词序列。(保留字、修饰符、标识符、分隔符..)

//eg:
static int x;
extern double f;
char p;
const char *ptr=&p;
...

3) 语法分析:检查程序语法结构。(根据程序设计语言的形式规范检查程序语法的正确性)

4) 代码生成:生成中间代码。

5) 模块连接:中间代码与库连接,形成一个可执行的程序。库:标准库、非标准库(自己的、第三方的)。

静态连接:由编译程序完成,又称编译时连接。被调用函数的函数体拷贝到可执行程序中,存于内存运行速度较快。静态链接库(Static Library,lib):包含了实际执行代码、符号表等。 动态连接:由操作系统完成,又称运行时连接。在可执行程序中,保存被调用函数的描述信息。函数存于外部设备,程序运行速度较慢,但由于副本的唯一性,在多任务操作系统中为操作系统节省大量存储。动态链接库(DLL):动态链接库的导入库(Import Libary,lib);执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数。

6) 函数绑定(binding):函数的入口地址与函数调用相联系的过程。

静态绑定:在程序执行前完成。 由编译程序或操作系统装入程序计算函数的入口地址。 动态绑定:在程序执行过程中完成。 由程序自身计算函数的入口地址。
传统的过程设计程序只支持静态绑定,C++等面向对象的程序,即支持静态绑定也支持动态绑定,具体绑定类型依赖于运行时指针所指对象的实际类型。
//使用动态链接库是否为动态绑定?
  //非也。使用动态链接库,也是静态绑定。动态绑定是在程序运行前,都不知道会调用哪一个函数。

面向对象程序设计的四个阶段:系统分析、系统设计、对象设计和对象实现

系统分析:建立对象模型、动态模型、功能模型
系统设计:设计相关结构和类型。
对象设计:细化系统分析建立的三个模型。
对象实现:与采用的程序设计语言有关。

基本概念:

对象:现实世界具体的或抽象的“事物”。

类:描述对象特征和行为的集合体。是一种复杂的数据类型,是一种模板; 将不同类型的数据及对它们的操作封闭在一起。

抽象:从对象(事物)到类型(概念) 从低级类型(概念)到高级类型(概念)。

函数调用:实现消息传递机制

参数和返回值:实现信息传递

函数体:完成收到消息后的处理

交互类型:

  1. 直接交互:指一对象调用另一对象的操作、功能或函数.
  2. 间接交互:通过发送或监听消息完成。

8dcac567125dace07b9049bab283582d.png

重载与多态:重载为多态的一种特例,重载又称编译时多态,多态又称运行时多态。

继承与抽象:

  1. (小孩从父母身上继承特征,小孩为派生类对象,父母为基类对象),派生类对象可同时继承多个基类对象,这种继承称为多继承,与之相对的是单继承。JAVA为单继承类,C++为多继承类。继承可分为取代继承、包含继承、受限继承和异化继承。
  2. 取代继承:派生类对象完整地继承了基类的所有对象,并且未修改、增加新的“属性”和“操作”。取代继承适用于单继承,这种继承没有产生变种,几乎没有应用价值。
  3. 包含继承:派生类对象完整地继承了基类的所有对象,并增加了新的“属性”和“操作”。
  4. 受限继承:派生类对象部分地继承了基类地“属性”和“操作”,并增加了新的“属性”和“操作”。
  5. 异化继承:派生类对象继承了基类的“属性”和“操作”,并对原有的“属性”和“操作”进行了修改。

相关参考书籍:
[1] 张德慧. C++面向对象程序设计. 科学出版社,2005年
[2] 沈学东. C++面向对象程序设计实用教程.上海交通大学出版社,2012年
[3] C++编程思想 Thinking in C++ 刘宗田等译,机械工业出版社
[4] C++ Primer,李师贤等译,人民邮电出版社
[5] C++高效编程, Effect C++
[6] C++编程语言,C++ Program Language
[7] C++入门经典 The C++ Language Begining
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值