目录
C++语言程序设计复习(一)
一、绪论
面向对象基本概念
- 对象:面向对象方法中的对象,是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象由一组属性和一组行为构成。
- 类:分类所依据的原则是抽象。面向对象方法中的“类”,是具有相同属性和服务的一组对象的集合。
- 封装:封装是面向对象方法的一个重要原则,就是把对象的属性和服务结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。
- 继承:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。
- 多态性:多态性是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。
面向对象的软件开发过程
面向对象的软件工程是面向对象方法在软件工程领域的全面应用。它包括面向对象的分析(OOA)、面向对象的设计(OOD)、面向对象的编程(OOP)、面向对象的测试(OOT)和面向对象的软件维护(OOSM)等主要内容。
完整程序过程
见《C++语言程序设计》P17 图1-2
二、简单程序设计
- 简单的I/O格式控制
操纵符名 | 含义 |
---|---|
dec | 数值数据采用十进制表示 |
hex | 数值数据采用十六进制表示 |
oct | 数值数据采用八进制表示 |
ws | 提取空白符 |
endl | 插入换行符,并刷新流 |
ends | 插入空字符 |
setprecision(int) | 设置浮点数的小数位数(包括小数点) |
setw(int) | 设置域宽 |
//2_1.cpp
# include <iostream>
# include <iomanip>
// 针对命名空间的指令
// 预处理指令,将文件iostream中的代码嵌入到程序中该指令所在的地方
using namespace std;
int main(){
cout<<"Hello!"<<endl;
cout<<"Welcome to C++!"<<endl;
cout<<ends<<sizeof(int);
cout<<setw(5)<<setprecision(3)<<3.1415<<endl;
return 0;
}
- 算法的基本控制结构
主要包括顺序结构、选择结构、循环结构。
- 选择结构:
- if语句:每层的if要与else配对,如果省略其中某一个else,便要用{}括起该层的if语句来确定层次关系
- switch语句0:每个case语句只是一个入口标号,并不能确定执行的终止点,因此每个case分支最后应该加上break语句,用来结束整个switch结构,否则会从入口点开始一直执行到switch结构的结束点。
- switch语句1:当若干个分支需要执行相同的操作时,可以使用多个case分支共用一组语句。
- 循环结构:
- 在循环体中要包含改变循环条件表达式的语句
- 包括while语句、do…while语句、for语句
- 选择结构与循环结构嵌套使用
- 其他控制语句:
- break语句:出现在switch语句或循环体中时,使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。
- continue语句:可以出现在循环体中,其作用是结束本次循环,接着开始判断决定是否执行下一次循环。
- goto语句:适宜使用在跳出多重循环时,少用或不用。
- 自定义数据类型
- typedef声明:可以为一个已有数据类型声明多个别名。
- typedef语法格式:typedef 已有类型名 新类型名表;
- 枚举类型enum: enum 枚举类型名 {变量值列表};
- 枚举类型应用说明:对枚举元素按常量处理,不能对他们赋值。
enum Weekday {SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
三、函数
函数有利于代码重用,可以提高开发效率,增强程序的可靠性,也便于分工合作、便于修改维护。
函数的定义
- 函数定义的语法形式
类型说明符 函数名(含类型说明的形式参数表)
{
语句序列
} - 形式参数
形式参数(简称形参)表的内容如下:
type1 name1,type2 name2,...,typen namen
- 函数的返回值和返回值类型
return 表达式;
函数的调用
- 函数的调用形式
如果希望在定义一个函数前调用它,则需要在调用函数之前添加上该函数的原型声明,函数原型声明的形式如下:
类型说明符 函数名(含类型说明的形参表)
- 嵌套调用
函数允许嵌套调用。如果函数1调用了函数2,函数2再调用函数3,便形成了函数的嵌套调用。 - 递归调用
函数可以直接或间接的调用自身,称为递归调用。(典型案例:汉诺塔问题)
函数的参数传递
- 值传递
值传递是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这一过程是参数值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变都不会影响到实参。 - 引用传递
引用是一种特殊类型的变量,可以被认为是另一个变量的别名。
int &ri=i; //建立一个int型的引用,并将其初始化为变量i的一个别名
void swap(int &a,int &b){
} //实际上传入的是地址
内联函数
针对功能简单、规模较小又频繁使用的函数。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。节省了参数传递、控制转移等开销。
其语法形式如下:
inline 类型说明符 函数名(含类型说明的形参表)
{
语句序列
}
带默认形参值的函数
函数在定义时可以预先声明默认的形参值。(右边默认)
int add(int x, int y=5, int z=6) //right
int add(int x=1, int y=5, int z) //wrong
int add(int x=1, int y, int z=6) //wrong
在相同的作用域内,不允许在同一个函数的多个声明中对同一个参数的默认值重复定义,即使前后定义的值相同也不行。
函数重载
两个以上的函数,具有相同的函数名,但是形参的个数和类型不同,编译器根据形参和实参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数的重载。(返回值类型不作为重载标准)
int add(int x, int y);
float add(float x, float y); //形参的类型不同
C++系统函数
C++不仅允许用户根据需要自定义函数,而且C++的系统库中提供了几百个函数可供程序员使用。
使用前需要用include指令嵌入相应的头文件(系统函数的原型声明文件)。
查阅各种常使用的标准C++函数的原型、头文件和用法