摘要:当类型本身或者类型的成员变量带有虚函数以及像std::vector这类复杂数据结构的时候。就会出错,原因是memset把类型本身所带的一些隐含的信息也给置0了。如:虚表指针、std::vector的内部数据
阅读全文
摘要:前者取data_member在class中的offset;指针类型是:type class::* 后者将会得到该data_member在内存中的真正地址;指针类型是:type*
阅读全文
摘要:(1)单一继承 (2)多重继承 (3)虚拟继承 参考:《深度探索C++对象模型》
阅读全文
摘要:(1)C++对象模型 (2)单一继承无虚函数 (3)单一继承有虚函数 (4)多重继承 (5)虚拟继承(vc++) (6)虚拟继承(g++) 参考:《深度探索C++对象模型》
阅读全文
摘要:(一)构造时: (1)首先调用继承关系中第一个基类(最靠左边的)的构造函数,然后第二个,第三个,以此类推 (2)然后调用成员对象的构造函数,这个顺序按照定义的顺序,与构造函数初始化列表的顺序无关。 (3)最后调用派生类的构造函数 (二)析构时: 与构造时的调用顺序正好相反。
阅读全文
摘要:事实上,除了在同一个文件定义的全局对象的初始化顺序是按照定义次序来进行的之外,对于不同编译单元的全局变量,其初始化的顺序没有任何的保证。 因此,对不同编译单元里的全局变量,在它们的初始化顺序之间建立依赖性都是不明智的。 如果a和b定义在同一个文件里,那没什么问题,结果b等于5. 如果a和b定义在不同
阅读全文
摘要:1、字符串分割函数。比如把形如:“aa:bb:cc”这样的字符串去掉“:”分割成三部分放入str_vec中。(2016/4/19)
阅读全文
摘要:【1】Nonstatic Member Functions(非静态成员函数) C++的设计准则之一就是:nonstatic member function至少必须和一般的nonmember function有相同的效率。也就是说,如果我们要在以下两个函数之间作选择: 那么选择member funct
阅读全文
摘要:让一个成员函数带上常量性是什么意思呢?通常的答案是,一个常成员函数不会更改其class对象。这是一种平凡的表述,而编译器实现的手法也相当平凡。 任何非静态成员函数其实都被编译器隐式插入了一个指针类型的参数,以在调用时有一种指向class对象自身的途径。在函数内部,关键字this被用于给出该指针的值:
阅读全文
摘要:表驱动法 前注:希望我的读书笔记能带你快速翻过20页的书,欢迎讨论http://www.cnblogs.com/jerry19880126 这里谈谈一些学习方法吧,看了二十多年的书的,发现不同的书,有不同的看法:小说类的读起来最轻松,只要跟着作者走就行了,会写书的作者应该能呈现 一些剧情的细节,读者
阅读全文
摘要:大体上方法很是简洁明了的,要是涉及到每个具体步骤上还是有很多内容的,这里我就简单说一下吧: 读文件的话就是:1、打开文件2、读文件3、关闭文件。 写文件的话就是:1、打开文件2、写文件3、关闭文件。 写文件(内存到磁盘文件) std::ofstream outfile; outfile.open("
阅读全文
摘要:几个数值函数的功能实现: (1)int Ceil(float f) int Ceil(float f) { int integer = (int)f; if (f > (float)integer) integer++; return integer; } (2)int Floor(float f)
阅读全文
摘要:Clamp函数可以将随机变化的数值限制在一个给定的区间[min, max]内: template<class T> T Clamp(T x, T min, T max) { if (x > max) return max; if (x < min) return min; return x; }
阅读全文
摘要:1、摘要: 程序设计并非魔数,所以不要故弄玄虚:要避免在代码中使用诸如42和3.14159这样的文字常量。它们本身没有提供任何说明,并且因为增加了难于检测的重复而使维护更加复杂。可以用符号名称和表达式替换它们,比如width * aspectRatio。 2、讨论: 名称能够增加信息,并提供单一的维
阅读全文