目录
一、运算符
1. 成员访问运算符
“ . ”用于获取类对象的一个成员,“ -> ”作用于指针类型的运算对象
2. sizeof运算符:获得表达式(不计算)或类型所占的字节数
char:1
引用:引用对象所占空间大小
指针:指针本身所占空间大小
数组:所有元素的大小
二、类型转换 & 语句
1. 隐式类型转换:
算术转换 ; 指针转换成bool、const...
2. 强制类型转换:cast
3. switch匹配
break语句的作用——中断当前的控制流
default标签—— 没有一个case标签能匹配上switch表达式的值
◇ 找错误:
(c):case不能那么写
(c) unsigned evenCnt = 0, oddCnt = 0;
int digit = get_num() % 10;
switch (digit) {
case 1, 3, 5, 7, 9:
oddcnt++;
break;
case 2, 4, 6, 8, 10:
evencnt++;
break;
}
unsigned evenCnt = 0, oddCnt = 0;
int digit = get_num() % 10;
switch (digit) {
case 1: case 3: case 5: case 7: case 9:
oddcnt++;
break;
case 2: case 4: case 6: case 8: case 0:
evencnt++;
break;
}
(d):case必须是int const
(d) unsigned ival=512, jval=1024, kval=4096;
unsigned bufsize;
unsigned swt = get_bufCnt();
switch(swt) {
case ival:
bufsize = ival * sizeof(int);
break;
case jval:
bufsize = jval * sizeof(int);
break;
case kval:
bufsize = kval * sizeof(int);
break;
}
const unsigned ival=512, jval=1024, kval=4096;
unsigned bufsize;
unsigned swt = get_bufCnt();
switch(swt) {
case ival:
bufsize = ival * sizeof(int);
break;
case jval:
bufsize = jval * sizeof(int);
break;
case kval:
bufsize = kval * sizeof(int);
break;
}
4. 跳转语句
◇ break语句:终止离它最近的while、 do while、 for、 switch,并且从这些语句之后的第一条语句开始执行
◇ continue语句:终止循环中的本次迭代,开启下一次的迭代
◇ goto语句:无条件跳转到同一函数内的另一条语句
5. 异常处理:
◇ throw表达式
◇ try语句块
◇ 异常类:标准库定义的一组类
6. 控制流:程序的执行路径
三、函数
1. 典型的函数包括:返回类型、函数名字、0个或多个形参,语句块 = 函数体
2. 实参是形参的初始值,类型必须一致
形参列表可以为空,但是一定不能省略:void fun(){... ...}
3. 名字有作用域,对象有生命周期
自动对象:会在块执行后(函数),变成未定义的,e.g:形参
static 局部静态对象:虽然在函数体内,但是不会释放,知道本程序终止才会被销毁
4. 形参是引用类型,会绑定到对应的实参上,实参被引用传递
否则,仅仅是把实参的值拷贝给形参,在函数内改变形参的值不会对实参产生影响
5. 当函数无需修改引用形参的值时最好使用const引用&,不然需要copy比较低效
在形参中引用,可以返回额外信息
6. 重载函数 :同一作用域内的几个函数名字相同,但是形参列表(个数/类型)must不同
函数匹配 = 重载确定,编译器会根据参数的不同个数、不同类型自动确定应该调用哪一个
当我们调用print函数时,首先找到的是int值的局部声明,编译器会自动忽略外层作用域
所以第一个print会显示错误
#include<string>
using std::string;
string read();
void print(const string &);
void print(double);
void Bar(int val)
{
bool read = false;
string s = read();
void print(int);
|错!只能print innt
print("value:");
|对!
print(val);
print(3.14);
}
但如果3个print声明都放在同一个外部作用域,那么都对,因为编译器会往外找,3个都能看到
7. 默认实参:一个函数中的形参多次调用都被赋予了一个相同的值,默认实参之后的所有参数也都必须有默认值
8. 函数匹配过程:
(1)选出 同名+调用点可见的 候选函数
(2)选出 形参与实参数量相等 + 类型相同/可转化的 可行函数
(3)最后选出最佳匹配
9. 函数指针:
左边是返回类型,右边是形参列表
bool lengthCompare(const string &, const string &);
bool (*pf)(const string &,const string &);
|错!一个返回 指向bool指针 的函数
bool *pf(const string &, const string &);
重载函数必须得指定选用哪个指针