摘要:
在C++语言中,基类将类型相关的函数与派生类不做改变直接继承的函数区别对待,对于某些函数,基类希望它的派生类各自定义适合自身的版本,此时基类就将这些函数声明为虚函数。 派生类必须将其继承而来的成员函数中需要覆盖的那些重新声明。不同于之间的成员函数,虚函数必须得定义。 因为在派生类对象中含有与其基类对 阅读全文
摘要:
对于一个运算符函数来说,它或者是类的成员,或者至少含有一个类类型的参数。 对于一个重载的运算符来说,其优先级和结合律与对应的内置运算符保持一致。 逻辑与运算、逻辑或运算和逗号运算符的运算对象求值顺序规则无法保留下来,所以不建议重载; 逗号运算发和取地址运算符不重载的另一个原因:C++语言已经定义了这 阅读全文
摘要:
文本查询程序 要求:程序允许用户在一个给定文件中查询单词。查询结果是单词在文件中出现的次数及所在行的列表。如果一个单词在一行中出现多次,此行只列出一次。 对要求的分析: 1.读入文件,必须记住单词出现在每一行。因此,程序需要逐行读取文件,并将每一行分解成独立的单词; 2. 程序生成输出时,它必须能提 阅读全文
摘要:
拷贝控制操作:拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符、析构函数。 实现拷贝控制操作的最困难的地方是首先认识到什么时候需要定义这些操作。 拷贝构造函数: 如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数时拷贝构造函数。 参数是引用:为了避免陷入 阅读全文
摘要:
智能指针——shared_ptr 为了更容易地使用动态内存,新的标准提供了智能指针来管理动态对象。智能指针的行为类似常规指针,重要的区别是它负责自动释放指向的对象。 智能指针的使用方式与普通指针类似。解引用一个智能指针返回它指向的对象。 最安全的分配和使用动态内存的方法是调用一个名为make_sha 阅读全文
摘要:
当用decltype来获得一个函数指针类型时,必须加上一个*来指出我们要使用一个给定函数类型的指针。decltype<CompareIsbn>*。 map<string, int>::value_type v3; //v3 是一个pair<const string, int> 由于下标操作可能插入一 阅读全文
摘要:
泛型算法的基础是迭代器。 迭代器令算法不依赖于容器,但是算法依赖于元素类型的操作。也即:算法永远不会执行容器的操作。 那么,如果想向容器中添加元素或者执行其他的一些操作呢?标准库提供了插入迭代器来完成。但算法自身永远不会做这样的操作。 理解算法最基本的方法是:了解它们是否读取元素、改变元素、或是重排 阅读全文
摘要:
现代C++程序应该使用标准库容器,而不是更原始的数据结构,例如内置数组。 新标准库容器的性能几乎肯定与最精心优化过的同类数据结构一样好。 当我们用一个对象来初始化容器时,或将一个对象插入到容器中时,实际上放入到容器中的是对象值的拷贝,而不是对象本身。 容器选择原则: 首先确定是否真的需要在容器中间位 阅读全文
摘要:
关于this指针 成员函数通过一个名为this的额外的隐式参数来访问调用它的对象。当我们调用一个成员函数时,用请求该函数的对象初始化this。 因为this的目的总是指向“这个”对象,所以this是一个常量指针,我们不允许改变this中保存的地址。 例如this的类型是Sale_data* cons 阅读全文
摘要:
执行函数的第一步是(隐式地)定义并初始化它的形参。所以,函数最外层作用域中的局部变量也不能使用与函数形参一样的名字。 局部静态变量:在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被销毁。在此期间即使对象所在的函数结束执行也不会对它产生影响。 Best Practice:熟悉C的程 阅读全文