结构化程序设计思想与要点
函数间参数传递的3种方式
1.值传递
2.引用传递
3.指针传递
多文件结构(常见于团队协作)
1.cpp 2.cpp 3.cpp …
当源代码很长 函数很多的时候,分散保存在不同的源程序文件中,来组织和管理。
一旦要调用,必须先声明。
声明外部函数原型 与 外部全局变量
extern void SUM();
void SUM(); // 可省略extern关键字
extern double number; //不可省略extern!
extern double number = 0; //错误!不能初始化!
头文件
比如程序员甲编写了一个C++源程序文件1.cpp,其他程序员只要访问1.cpp中的几个函数或全局变量,就必须在自己的文件中依次写几条声明,很麻烦。
程序员甲在编写好1.cpp后,另外再编写一个头文件,其中包含1.cpp所有外部函数和外部全局变量的声明语句。
习惯上,将这个头文件命名为1.h或1.hpp,(即同名,拓展名.h或.hpp),即 #include”1.h”
以下甲、乙互相编写了头文件方便对方
static是多义词,在定义全局变量和局部变量时有区别??!!
静态函数 与 静态变量
语句前面加“ static ”
静态全局变量只能被本文件内使用!不能被其他文件使用!
编译预处理指令
以 # 开头,结尾不加 ;
常见的预处理指令有:
1.文件包含指令 #include
- #include<>或”“通用,,区别是 编译器先到哪里去搜索该文件
1.通常用于插入头文件(.h)
2.将指定内容插入该指令所在的代码位置
3.<文件名>的填写规则
2.宏定义指令 #define
用来减轻工作量,方便快捷
0.用一个标识符来表示一段代码文本,其中的标识符称:宏名,所表示的代码文本称:宏文本
1.宏替换
2.C++有3种形式的宏:无参宏、有参宏(有无未知参数存在)、空宏
3.已定义的宏可以用宏删除指令 #undef 删除
3.条件编译指令
允许程序员将不同版本的源代码(比如下例中英混编)编写在同一程序文件中,便于管理和维护修改
有2种格式
#ifdef 空宏名
代码段1
#else
代码段2 //如果指定的空宏已经定义,则编译代码段1,否则编译2,若没有2,则省略#else
#endif
#ifdef 常量表达式 //常量表达式:只能包含常量或符号常量
代码段1
#else
代码段2 //如果指定的常量表达式结果不为0,则编译代码段1,否则编译2,若没有2,则省略#else
#endif
几种特殊形式的函数
1.带默认形参(先写没有默认值的形参,再写有默认值的)
void add(int a , int b = 5)
{}
2.重载函数
C++规定:如果两个函数的形参个数不同,或数据类型不同,那么可以重名。重名的函数被称为重载函数。在编译中,由编译器自动调用最匹配的。
3.内联函数
函数跳转会降低程序的执行效率。如何平衡呢? 即这一种能兼顾两种的特殊的函数。
1.原理:在编译源程序时将函数代码直接镶嵌到每一个调用语句处,而在执行时不再进行函数跳转和数据传递。
2.格式( inline)
inline double sum()
{}
3.使用范围
3.1内联函数必须是简单函数,如果函数体比较复杂(比如包括循环)就不行了。
3.2只有被多次调用才能体现出内联函数的效率,所以适用于频繁调用的简单函数。
4.主函数main
5.递归函数
直接或间接调用自身
..........
if (递归终结条件)
取得已知结果
else
按照递归公式调用自身
系统函数
程序员需要先阅读编译系统提供的手册,学习各系统函数的调用语法,并用 #include 指令包含相应的头文件,标准C库头文件的扩展名都是“ .h ”
C++语言全盘继承了C语言的语法规则,以及标准C库
1.包括:标准C库 和 C++标准库(新)
2.输入输出函数:#include < stdio.h >
3.数学函数:#include < math.h >
平方根函数、指数对数三角函数……
4.字符串处理函数:#include < string.h >
求字符数组中的字符串长度strlen()
拷贝、连接等……
5.动态内存分配函数:#include < stdlib.h >
6.命名空间
地名加上国度,就避免了“重名”的问题,而“国度”就是“命名空间”的概念。
22:00https://www.icourse163.org/learn/CAU-368007?tid=1002236002#/learn/content?type=detail&id=1002987280&cid=1003474758
7.C++语言的系统类库
cin、cout是标准输入流对象和标准输出流对象,而使用cin和cout对象需要以下两行:
#include<iostream> //包含cin、cout的相应头文件
using namespace std; //并且声明其命名空间“std”
8.多文件结构下程序员与函数の关系
结构化程序设计的应用与回顾
代码重用
一个编好的C++函数可以被同一项目中的多人调用,也可以在今后的项目中继续使用,这就是函数代码的重用。
市场上还有很多厂家为程序员提供编好的、可实现不同功能的函数库。
调用这些函数库中的函数,程序员就可以快速开发出各种功能强大的应用程序,这就是程序的应用开发。
windows图形用户界面(GUI)程序 Win32 API函数库开发示例
自定义数据类型 typedef
用法有二:
1.为现在的数据类型重新命一个别名
typedef unsigned char AGE;
AGE x; //等价于:char x;
2.定义指针类型
typedef int* IPointer;
IPointer p1; //等价于: int* p1;
3.定义数组类型
typedef char NAME[10];
NAME name1; //等价于: char name1[10];
4.枚举类型
5.联合体类型(描述复杂数据
1.特点:变量成员共用同一内存单元,同一时刻只能保存一个成员的数据
6.结构体类型(注意最后的分号 ;
本章回顾