文章目录
基础知识
C++的基本元素及基本数据类型
基本符号
大、小写字母;下划线(不是连接符);数字;标点符号及运算符
标识符
- 用来标识变量、常量、函数及文件的字符序列
- 只能由字母、数字、下划线组成
- 第一个字符必须是字母或下划线
- 有长度限制且区分大小写
基本数据类型
整型:(unsigned) int、short、long
实型:float、double
字符型:(unsigned) char
布尔型:bool
常用运算符及其优先级别
算术运算符
*、/、%(高)
+、-(低)
关系运算符
<、> 、>=、 <=(高)
==、!=(低)
程序的三种基本控制结构
顺序结构、选择结构、循环结构
选择结构的几种基本语句
if(e) A;
if(e) A;
else B;
if(e1) A1;
else if(e2) A2;
else if(e3) A3;
…
else An;
switch(e)
{
case e1: A1; break;
case e2: A2; break;
…
default: An;
}
循环结构的几种基本语句
while(e)
A;
do A;
while(e);
for(e1;e2;e3) A;
C++程序的开发流程
函数
函数的定义
-
C++程序是由一个一个的函数组成的
-
函数的定义:
函数类型 函数名([形参类型说明表])
{ 函数体
} -
形式参数表中必须指出每个变量的类型:
int max(int x, int y)
{
int z;
z=x>y ? x: y;
return(z);
}
int max(int x, y)
{
int z;
z=x>y ? x: y;
return(z);
}
函数的参数和函数的值
形式参数与实际参数
- 函数参数:用于函数间数据的传递
- 形式参数:定义函数时使用的参数
- 实际参数:调用函数时使用的参数
函数的返回值
- 函数的返回值即函数的值,是一确定的值。
- 一个函数可以有多个return语句,但不论执行到哪个return,都将结束函数的调用而返回主调函数。
- return后面的括号可以省略,return后面可以是表达式。
函数的调用
调用形式
函数名(实参表);
说明
- 如果是调用无参函数,则没有“实参表”,但括号不能省略;
- 实参个数与形参个数一般是相同的,但如果有缺省值,则可以不相同;
- 实参类型与形参类型最好相同,如果不相同,编译系统会进行数据类型转换;
- 函数调用在函数定义之前时,必须在函数调用前对该函数进行函数声明
main()
{
float a=3.5, b=6.5, c;
c = add(a, b);
printf(“sum is %f", c);
}
float add(float x, float y)
{
return(x+y);
}
函数的嵌套调用:在一个函数的函数体内又调用了另一个函数
函数的递归调用:函数直接或间接的调用自身
内置函数(内联函数)
- 函数调用会增加执行的开销,C++中提供了内联函数,可以减少函数调用的开销;
- 编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销;
- 定义内联函数时,使用关键字inline。
带缺省形参的函数
函数在定义时可以预先定义出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先定义出的默认形参值。
int add(int x=5, int y=6)
{
return x+y;
}
void main(void)
{
add(10,20); //10+20
add(10); //10+6
add(); //5+6
}
函数的重载
- C++允许功能相近的函数在相同的作用域内以相同函数名定义,从而形成重载。重载函数的形参列表必须不同: 个数不同或类型不同。
- 函数重载且具有缺省参数时,不能引起二义性:
int fun ( int x, char y); {
…… }
int fun (int x=1, char y= ‘a’, float z = 6.2); {
…… }
fun ( 2, 3);//产生了二义性
函数模板
- 函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,
- 例,计算两个向量和的函数模板:
# include <iostream.h>
Template <class T> //模板声明,其中T为虚拟类型
T* sum(T* a, T* b, int n)
{
T* c = new T[n];
for(int i=0; i<n; i++) c[i] = a[i] + b[i];
retrun c;
}
数组
- 数组是一种构造类型数据,它是按序排列的具有相同类型变量的集合。
int a[10];
float b[12];
char c[20];
- 数组名后只能用方括号括起来的正常量表达式(正常数或正符号常量)
#define M 10
int i=15;
int data[M]; 对
float f[i]; 错
char c(20); 错
- 数组元素的下标从0开始,且不能越界(虽然下标越界不是语法错误)。
- 一维数组如果不初始化,则自动赋随机值。
- 可以只组前面部分元素赋初值,系统会自动给其它元素赋0,但所赋初值个数不能大于数组长度。
int a[4] = {
1, 2}; <=> int a[4] = {
1, 2, 0, 0};
int a[4] = {
1, 2, 3, 4, 5}; 错
- 如果给一维数组的所有元素初始化,则可以不指定数组的长度,系统会自动根据初始化元素的个数确定数组长度。
int a[ ] = {1, 2, 3, 4}; - 对于二维数组,如果对所有元素赋初始,则必须指明第二维的长度,而不必指明第一维的长度。
int a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int a[ ][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
指针
结构体
结构体类型定义的一般形式为:
struct 结构体名
{成员表列};
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
- struct是关键字,表示是结构体类型,不可省略。
- student是一种数据类型,而不是一个变量,因此不分配内存。
- 对各成员都应进行类型说明。
- 结构体名和成员名命名规则与变量命名规则相同。
结构体一个很典型的应用是链表