C++语言笔记
数据类型
-
标识符(与C语言类似)
- 只能有大小写字母,下划线_,和数字组成
- 只能以字母开头
- 不能是C++的关键字
- 区分大小写
-
常量
整型常量:
实型常量:浮点数。
有三种数据类型:float,double,long double。(默认为double型,若后缀为F 或f则为float型)
有两种表示形式:一般形式(如1.2)和指数形式(如2.54E3= 2.54 × 1 0 3 2.54\times10^3 2.54×103)。指数形式的规则:e前e后必须有数,e后必须为整数
当以指数形式表示一个实数时,整数部分和小数部分可以省略其一,但不能都省略。例如 : .123E- 1, 12.E2 ,l. E-3 都正确,但不能写成E-3 这种形式。
(郑莉主编C++语言程序设计 P26)
经过尝试,其实2E3(2后边不带小数点)也是正确的。
字符型常量:在计算机中以ASCII码形式存储。有一般字符和转义字符。
一般字符如
'a','A','\32'
和八进制、十六进制表示的'\nnn'(n表示八进制数),'\xnnn'n表示十六进制数
字符串常量:如
"Hello,world."
。在计算机中,末尾有\0作为字符串结束标志,而字符型常量没有。布尔常量(bool):只有两个:true和false,但是用cout进行输出的时候只能看到0和1.
-
变量
3.1 变量的声明和定义
3.2 变量的存储类型
共有四种:auto register extern static在后续变量作用域部分会说明。
-
符号常量–必须初始化
如
float const PI = 3.1415 ;
或const float PI = 3.1415;
注意:符号常量在声明时一定要赋初值,而在程序中闯不能改变其值。
运算符和表达式
运算符
-
算术运算符
+、-、*、/(若操作数都为整型,则结果为整数-斩尾取整;之一为实型则结果为浮点数)
% 取余,操作数必须为整数。
逗号运算符
注意下面代码段的结果:
int main()
{
int a,b;
b=(a = 3 * 5, a * 4);//a=15,但是整个表达式的值即b等于60
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
逻辑运算符
逻辑与(&&)和(||)逻辑或的短路特性:
表达式1 && 表达式2
//若表达式1结果为false,则不在运算表达式2
表达式1 || 表达式2
//若表达式1结果为true,则不在运算表达式2
条件运算符
表达式1?表达式2:表达式3
//先运算表达式1,若为true则以表达式2的值为结果;若为false则以表达式3的值作为结果
//==============例如===================
a>b?3*2:3+2;
也具有短路特性
函数
嵌套调用
递归调用
函数自身调用自身。必须有递归结束标志
阶乘计算,汉诺塔问题,组合问题(从n个人中选出k个人)
参数传递
- 形参只有在调动函数时才会分配存储空间
- 值传递是单向传递
- 可以传递引用,双向传递
可变形参列表(考的少)
推荐使用模板initializer_list实现。
例如:
int initializerSum(initializer_list<int> il) {
int sum = 0;
for (auto ptr = il.begin(); ptr != il.end(); ptr++) //类似于容器的操作
{
sum += *ptr;
}
return sum;
}
int main() {
int initializer_num = initializerSum({ 1,1,1,1,9 });
printf("sum = %d", initializer_num);
return 0;
}
内联函数inline
C++11才有的功能
函数的实现如下:
inline double cirArea(double r)
{
return 3.14159*r*r;
}
直接调用即可。
必须保证以下条件:
- 内联函数体内不能有循环语句和switch语句
- 内联函数的定义必须出现在内联函数第一次被调用之前
- 对内联函数不能进行异常接口声明
constexpr函数
用constexpr修饰的函数。返回的是一个常量表达式。
接受它的返回值的变量也要用constexpr进行修饰,且类型一致。
具体的介绍查看:constexpr函数的介绍CSDN
默认参数函数
例如:
int add(int x = 5, int y = 6);
int main()
{
cout << add()<<endl;
return 0;
}
int add(int x, int y )
{
return x + y;
}
两种使用方式:
- 方式1为函数声明在主调函数之前,应该在函数声明时就确定形参默认值,而函数实现时的形参列表中不能有默认值。
- 方式2为传统方式,即函数定义在主调函数之前,则直接在形参列表中给出默认值。
注意:
- 形参列表中给出默认值时,有默认值的形参一律放在最无默认值的形参之后,如
int add(int x,int y=3,int z=2)
是正确的,而int add(int x=1,int y=3,int z)
是错误的。 - 函数被调用时,形参的值时按顺序传递给形参的。
注意C++中的setw()函数,用来操纵cout输出的,控制紧跟着该函数的输出的宽度的,如
cout <<setw(2)<<1<<endl;
。详见CSDN博客讲解
函数的重载
函数重载:
两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数的重载。
函数重载规则:
- 形参必须不同,即形参个数或形参类型不同
- 如果形参类型一样但返回值类型不同视为错误(函数重复定义)。