C++的编程模块
这一章讲述C++的函数,其中的乐趣在于大型库(标准ANSI库)和自己编写的函数,以及提高编程效率深入学习STL和BOOST C++提供的功能。void functionName(parameterList)
{
statement(s)
return ;
}
尽可能使用const:1.可以避免无意间修改数据导致的编程错误 2.能够同时处理const和非const的实参
按引用传递结构,还有函数指针的知识,C风格字符串:字符数组,字符串常量和字符串指针,以及string类.
### 函数探幽
内联函数、按引用传递、默认参数值、函数重载以及模板函数
C++新增加一种右值引用。返回引用时,避免返回函数终止则不再存在的内存单元引用
函数模板
template<typename AnyType> |
模板匹配的过程:1.创建候选函数列表 2.使用候选函数列表创建可行函数列表 3.确定是否有最佳可行函数
最佳到最差匹配顺序:1.完全匹配 2.提升转换 3.标准转换 4.用户定义转换
内存模型和名称空间
单独编译,将头文件和结构文件以及程序文件分开,头文件使用防护(guarding)方案,避免文件定义结构两次。(不同编译器创建的二进制模块很可能无法正确地链接,可以拿到源码后重新编译连接解决问题)
存储持续性,作用域和链接性
自动存储持续性:自动默认的变量,在块内或者函数生命周期里存在
静态存储持续性:static定义变量在程序运行过程中都存在
线程存储持续性(c++11):thread_local变量生命周期与线程一样长
动态存储持续性:用new分配的内存,直到delete才释放
静态变量的三种链接性:1.外部链接性(其他文件中访问)extern 关键字表示使用外部变量。 2.内部链接性(当前文件访问) 3.无链接性(函数或块内访问)
组织项目策略:头文件定义用户类型,为操纵类型的函数提供原型;源代码文件放置对应函数的定义;main和调用这些函数的函数放在第三文件上。
为了减少命名冲突,引入了命名空间的概念,空间还能嵌套
对象和类
突出显示OOP特性:抽象;封装和数据隐藏;多态;继承以及代码的可重用性。
接口是共享框架,供两个系统交互时使用的。
类的构造函数和析构函数,列表初始化参数,this指针,枚举结构体等。
使用类
运算符重载,友元函数,重载<<,状态成员,类的自动转换和强制类型转换。ClassName ClassName::operator+ (const ClassName & c) const {}
重载限制:1.至少一个操作数是用户定义类型 2.使用运算符时不能违反运算符原来的句法规则 3.不能创建新运算符 4.不能重载sizeof . * :: ?: typeid const_cast static_cast 5.= () [] ->只能通过成员函数进行重载 6.一般用友元重载<<
对于类的总结:相对于简单C-风格,使用类必须谨慎和小心,作为补偿,它为我们完成更多工作