一、最简单的C++程序
1.标准C++要求main函数必须声明为int型,如果程序正常执行,则向操作系统返回数值0,否则返回数值-1
2.在C语言中所有的头文件都带后缀.h,而按C++标准要求,由系统提供的头文件不带后缀.h,由用户自己编制的头文件可以有后缀.h,在C++程序中也可以使用C语言编译系统提供的带后缀.h的头文件
3.C++标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要使用C++标准库中的有关内容,就需要使用using namespace std;作声明
二、C++对C的扩充
1.C++的输入输出
流名 含义 隐含设备 cin 标准输入 键盘 cout 标准输出 屏幕 cerr 标准出错输出 屏幕 clog cerr的缓冲形式 屏幕 注:C语言要求变量的声明部分必须在执行语句之前,而C++允许对变量的声明放在程序的任何位置(但必须在使用该变量之前)
2.在C语言中常用#define指令来定义符号常量
C++提供了用const定义常变量的方法,例:const float PI = 3.14
区别:用const定义的常变量具有变量的属性,有数据类型,占用存储单元,有地址
3.函数原型声明:在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前必须对所调用的函数作函数原型声明
4.函数的重载:C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不相同,这些同名的函数用来实现不同的功能
注意:不允许参数个数和类型都相同而只有返回值类型不同
5.函数模板:适用于函数的参数个数相1同而类型不同,且函数体相同的情况
格式:template <typename T> 或 template <class T>
例:
template <typename T> T max(T a, T b, T c) { if(b > a) a = b; if(c > a) a = c; return a; }6.有默认参数的函数
例:float volume(float h, float r = 12.5);
函数调用:volume(45.6); 或 volume(34.2, 10.4);
注:(1)实参与形参的结合是从左至右顺序进行的,因此指定默认值的参数必须放在形参表列中的最右端
(2)若需要指定默认值,则应在调用函数之前指定,且为避免混淆,最好只在函数声明时指定默认值
(3)一个函数不能既作为重载函数,又作为有默认参数的函数
7.变量的引用
格式:typename &refName = varName;
说明:(1)对变量声明一个引用,并不另开辟内存单元;在声明一个引用时,必须同时使之初始化,即声明它代表哪一个变量
(2)在声明一个变量的引用后,在本函数执行期间,该引用一直与其代表的变量相联系,不能再作为其他变量的别名,即 int &b = a1; int &b = a2; 是错误的
(3)引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储空间,实际上,编译系统使引用和其代表的变量具有相同的地址,即有 sizeof(a) = sizeof(b)
(4)对引用的初始化,可以用一个变量名,也可以用另一个引用
用途:(1)将引用作为函数参数:将变量名作为实参时传给形参的是变量的值,在执行函数期间形参值发生变化并不传回给实参
例:
#include <iostream> using namespace std; void swap(int &a, int &b) { int temp; temp = a; a = b; b = temp; } int main() { int i = 3, j = 5; swap(i, j); cout << "i = " << i << " j = " << j << endl; return 0; }注意:(1)不能建立void类型的引用
(2)不能建立引用的数组,因为数组名只代表数组首元素的地址,本身不占有存储空间
(3)可以将变量的引用的地址赋给一个指针,此时指针指向原来的变量
(4)可以建立指针变量的引用
例:int i = 5; int *p = &i; int* &pt = p; cout << *pt; 此时输出5
(5)可以用const对引用加以限定,不允许改变该引用的值,但是它并不阻止改变引用所代表的变量的值
这一特征常用于作函数的形参,来保护形参的值不被改变
(6)可以用常量或表达式对引用进行初始化,但此时必须用const作声明
此时编译器处理方式:生成一个临时变量,用来存放该表达式的值,引用是该变量别名
8.内置函数:在编译时将所调用的函数的代码嵌入到主调函数中,又称内联函数
一般对规模很小且使用频繁的函数使用,以大大提高运行速度
例:
inline int max(int a, int b, int c) { if(b > a) a = b; if(c > a) a = c; return a; }9.作用域运算符:C++提供作用域运算符 :: ,它能指定所需要的作用域
例:
#include "iostream" using namespace std; float a = 1; int main(int argc, char const *argv[]) { int a = 2; cout << a << "\t" << ::a << endl; return 0; }此时输出: 2 1
10.字符串变量
C++标准库中声明了一个字符串类,在使用string类功能时,必须在本文件的开头将C++标准库中的string头文件包含进来,即 #include <string>
(1)对字符串变量的赋值:
例:string str, tmp = “China”;
str = “Canada”; 或 str = tmp;
在定义字符串变量不需指定长度,它的长度随其中的字符串长度而改变,且不存储末尾的\0
(2)字符串变量的输入输出:cout << string1; cin >> string2;
(3)字符串变量的运算:复制直接用等号,字符串连接用加号,字符串比较直接用关系运算符
例:str = string1 + string2;
(4)字符串数组:并不要求每个字符串元素具有相同的长度
11.动态分配/撤销内存的运算符 new 和 delete
注意:如果由于内存不足等原因而无法正常分配空间,new会返回一个空指针NULL
new 和 delete 是运算符,不是函数,new要和delete配合使用