do…while… 至少会执行一次的循环逻辑
哨兵(sentinel)字符: 一直读取,直到’他‘为止
检查文件是否正确打开很关键
用string读ifstream数据
1 |
|
关于函数,真正的乐趣在于编写自己的函数,函数库
指向const的指针以及const指针
递归使用
1 | void recurs(arg) |
先执行stat1,打开满足条件,打开新的递归;直到新的递归不满足条件,逐步执行stat2并关闭当前函数;直到所有打开的函数都关闭了。
函数指针
用函数指针将第一函数找到第二函数,而非直接调用;虽然笨拙,但好处是可以在不同时间传递不同的函数地址;
语法:double (*pf)(int);
应尽量使用const
1.使用const可以避免无意中修改数据的失误
2.使用const使函数能够处理const和非const实参,否则将不能处理const实参
3.使用const引用使函数能够正确生成并使用临时变量
引用非常适合用于结构和类
何时使用引用参数:1.能够修改调用函数中的数据对象 2.通过传递引用而非拷贝提高程序运行速度
语法糖:函数默认参数从右往左
函数多态:重载函数
不应滥用,适用于不同参数类型输入,完成基本一致功能的多个函数使用,const与非const也不一样
函数多态:模板编程
1 | template <typename T> // typename -> class is ok |
编译器如何匹配最佳函数是一个复杂而完备的过程,大致规则如下:
1.完全匹配,但常规函数优于模板
2.提升转换(char/shorts提升至int, float提升至double)
3.标准转换(int 转换char, long 转换double)
4.用户定义的转换,如类声明