![a3481f38d2d18952e6db89e8204cb088.png](https://i-blog.csdnimg.cn/blog_migrate/69fcd4eee42d79210d046badc512f650.jpeg)
基于马光志老师编著的《C++程序设计实践教程》。其他章节待更....
C++复习笔记:
第零章:宏论面向对象的程序设计
面向对象的核心:封装(Encapsulation) 继承 (Inheritance ) 多态(Polymorphism)
封装(Encapsulation) :将对象的特征和行为包装在一起
- 特征描述:对象的“组织结构” 数据成员
- 行为描述:对象的 “功能” 函数成员
- 封装定义了对象的边界
- 提供了外部访问的接口
- 屏蔽了对象内部的特征、行为细节
- 不同的对象中,可以有同名的函数
继承 (Inheritance ) :一个对象获得另一个或多个对象的特征和行为
多态(Polymorphism):调用同名函数,表现出的不同行为
- 静态多态:编译时明确了同名函数中的哪一个(重载、重载函数)
//实现两个数相加返回结果的加法函数
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](https://i-blog.csdnimg.cn/blog_migrate/e446813a171fac3b67f26ec934d86e03.jpeg)
关于程序的运行效率:
//运行速度 高效性 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++等面向对象的程序,即支持静态绑定也支持动态绑定,具体绑定类型依赖于运行时指针所指对象的实际类型。
//使用动态链接库是否为动态绑定?
//非也。使用动态链接库,也是静态绑定。动态绑定是在程序运行前,都不知道会调用哪一个函数。
面向对象程序设计的四个阶段:系统分析、系统设计、对象设计和对象实现
系统分析:建立对象模型、动态模型、功能模型
系统设计:设计相关结构和类型。
对象设计:细化系统分析建立的三个模型。
对象实现:与采用的程序设计语言有关。
基本概念:
对象:现实世界具体的或抽象的“事物”。
类:描述对象特征和行为的集合体。是一种复杂的数据类型,是一种模板; 将不同类型的数据及对它们的操作封闭在一起。
抽象:从对象(事物)到类型(概念) 从低级类型(概念)到高级类型(概念)。
函数调用:实现消息传递机制
参数和返回值:实现信息传递
函数体:完成收到消息后的处理
交互类型:
- 直接交互:指一对象调用另一对象的操作、功能或函数.
- 间接交互:通过发送或监听消息完成。
![8dcac567125dace07b9049bab283582d.png](https://i-blog.csdnimg.cn/blog_migrate/41883dac078e98b095961afba8dd04c9.jpeg)
重载与多态:重载为多态的一种特例,重载又称编译时多态,多态又称运行时多态。
继承与抽象:
- (小孩从父母身上继承特征,小孩为派生类对象,父母为基类对象),派生类对象可同时继承多个基类对象,这种继承称为多继承,与之相对的是单继承。JAVA为单继承类,C++为多继承类。继承可分为取代继承、包含继承、受限继承和异化继承。
- 取代继承:派生类对象完整地继承了基类的所有对象,并且未修改、增加新的“属性”和“操作”。取代继承适用于单继承,这种继承没有产生变种,几乎没有应用价值。
- 包含继承:派生类对象完整地继承了基类的所有对象,并增加了新的“属性”和“操作”。
- 受限继承:派生类对象部分地继承了基类地“属性”和“操作”,并增加了新的“属性”和“操作”。
- 异化继承:派生类对象继承了基类的“属性”和“操作”,并对原有的“属性”和“操作”进行了修改。
相关参考书籍: |
[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 |