随笔分类 - c/c++基础
摘要:1. C中static有什么作用(1)隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。(2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量。(3)static的第三个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0×00,某些时候这一特点可以减少程序员的工作量
阅读全文
摘要:在C++中,只有单个形参,而且该类型是对本类类型的引用(常用const修饰),这样的构造函数称为复制构造函数。复制构造函数既可以自己定义又可以像默认构造函数一样被编译器隐式调用。但大多数时候,特别是类中有指针成员的时候要实现深复制,避免浅复制时,就需要自己定义复制构造函数。那么我们定义的复制构造函数什么时候调用呢,总结起来,有如下五种情况,下面分别举例说明。一、根据一个同类型对象显示或隐式初始化一个对象。例如: string str1 = "123456";//copy-initialization string str2(str1);//copy-initializati
阅读全文
摘要:C++语言虽然兼容C,也支持C语言的类型转换用法,就是将类型用圆括号括起来,这种转换可视性比较差,难以跟踪错误的转换。C++提供了命名的强制转换操作符,毕竟转换有时是不安全的,所以使用命名转换操作符可以根据所使用的转换操作符可以判断风险级别。下面我们就来看看C++提供的四种命名的强制转换操作符的具体功能和用法。1.const_cast2.static_cast3.reinterpret_cast4.dynamic_cast这四个操作符的使用方法是相同的,都是cast-name<Type>(expression),Type是被转换值expression的目标类型。下面看看这四个操作符
阅读全文
摘要:预处理器为我们定义了四个有用的常量,使用这四个常量可以在错误消息中提供更多的信息,他们分别是:__FILE__ 文件名__LINE__ 当前行号__TIME__ 文件被编译的时间__DATE__ 文件被编译的日期例如,我们可以使用如下小例子看看这几个常量的用法,功能是判断输入的单词是否小于定义的最小长度,如小于则输出错误信息,代码如下:#include <iostream>
#include <string>
using namespace std; int main()
{ const string::size_type THRESHOLD = 3; string w
阅读全文
摘要:在c++中,io操作都是有io对象来实现的,每个io对象又管理一个缓冲区,用于存储程序读写的数据。只有缓冲区被刷新的时候缓冲区中的内容才会写入真实的文件或输出设备上。那么,什么情况下会刷新输出缓冲区呢,有如下五种情况:1.程序正常结束。作为main返回工作的一部分,将清空所有的输出缓冲区。2.在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。3.用操纵符显示地刷新缓冲区,如用endl。4.在每次输出操作执行完毕后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区。5.可将输出流与输入流关联起来,在读输入流时将刷新其关联的输出缓冲区。我们可以通过以下实例
阅读全文
摘要:二叉排序树又称二叉查找树,是一种的高效的查找数据结构,查找效率等同二分法。 以下是二叉查找树的一种简单模板实现:#include <iostream>using namespace std;template <typename T>class BinSearchTree{public: typedef Node* tree; BinSearchTree():rp(NULL), n(){} ~BinSearchTree(){ _clear(); n = 0; } void insert(const T& d){ _insert(rp, new Node(d));
阅读全文

浙公网安备 33010602011771号