目录
第 1 章. C++的初步知识
1.1 从C到C++
-
C语言是结构化和模块化的语言,它是面向过程的,在处理较小规模的程序时,用C语言较得心应手
-
C++保留了C语言原有的所有优点,并增加了面向对象的机制,与C兼容,C++既可以用于面向过程的结构化程序设计,又可用于面向对象的程序设计。
-
C++对C的“增强”,表现在两个方面:①在原来面向过程的机制基础上,对C语言的功能做了不少扩充。②增加了面向对象的机制。
1.2 C++对C的扩充
-
C++的输入输出 : cin 和 cout
-
cout:cout 必须和输出运算符"<<" 一起使用。 C语言中"<<"是左移运算符,C++中赋予了新的含义:作为输出信息时的“插入运算符” 。 例如:
“cout << "Hello!\n” ;
的作用是将字符串"Hello!\n" 插入到 输出流cout中,也就是说把所指定的信息输出在标准输出设备上。 -
setw用法:如果要指定输出所占的列数,可以用控制符 setw 进行设置,如 setw(5) 的作用是为其后面一个输出项预留5列的空间,如果输出数据项的长度不足5列,则数据向右对齐,若超过5列则按实际长度输出。
例子:
float a = 3.45; int b = 5; char c = 'A';
cout << "a=" << setw(6) << a << endl << "b=" << setw(6) << b << endl << "c=" << setw(6) << c << endl;
a=_ _3.45
b=_ _ _ _ _5
c=_ _ _ _ _A
Tip: _ 代表一个空格
-
cin: 从输入设备向内存流动的数据流称为输入流。C++中,用“>>”运算符从输入设备键盘取得数据并送到输入流cin中,然后再送到内存。这种输入操作成为“提取”或“得到”, 常称为提取运算符。
#include < iostream > using namespace std; int main(){ cout << "ok" << endl; int a; cout << a << endl; }
上面的程序中可以看到,对变量a的定义放在了执行语句(cout ...)之后,在C语言程序中是不允许这样的,它要求声明部分必须在执行语句之前。而C++允许对变量的声明放在程序的任何位置(但必须在使用该变量之前)。这是C++对C限制的放宽。Tip:当面试官问C++对C语言进行功能扩充的实例时,可以用。
1.3 用const 定义常变量
-
在C语言中常用 #define 来定义符号常量, 例如
#define PI 3.14159
。但实际上,只是在预编译时进行字符置换,把程序中出现的字符串PI 全部置换为3.14159。在预编译之后,程序中不再有PI这个标识符。PI不是变量,没有类型,不占用存储单元,而且容易出错,如
int a = 1; b = 2; #define PI 3.14159 #define R a+b cout << PI * R * R << endl;
这时输出的并不是我们以为的
3.14159*(a+b)*(a+b)
, 而是3.14159*a+b*a+b
。程序因此常常出错。 -
但是在C++语言中提供了const定义常变量的方法,如
const float PI = 3.14159;
, 定义了常变量PI,它具有变量的属性,有数据类型,占用存储单元,有地址,可以用指针指向它,只是在程序运行期间变量的值是固定的,不能改变。因为不像#define那样容易出错,const问世后,已经取代了用#define定义符号常量的作用。 -
const 常与指针结合使用,有指向常变量的指针、常指针、指向常变量的常指针等,这些概念容易模糊,将在第3章介绍。
1.4 C++的函数声明
-
在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前必须对所调用的函数作函数原型声明(强制)。
函数声明形式:
函数类型 函数名(参数表)
参数表中一般要包括参数类型和参数名(int a), 也可以只包括参数类型而不包括参数名,如下:
int max(int x, int y);// 函数声明1 int max(int, int);//函数声明2
1.5 C++重载
-
C语言规定在同一作用域中不能有同名的函数,C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不相同,同名函数用来实现不同的功能。这就是函数的重载,即一个函数名多用。
1.6 函数模板
-
定义函数模板的一般形式:
template < typename T >
, 其中template 的含义是“模板”, 尖括号中先写关键字typename( 或 class),后面跟一个类型参数 T(也可以用任意一个标识符)。
1.7 有默认参数的函数
-
float area(float r = 6.5); area();//相当于area(6.5) area(7.5);//形参得到的值为7.5,而不是6.5