
C++
bama2488313716
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++虚函数实现机制
今天看到一篇介绍C++虚函数实现机制写得非常好的一篇博文,下面给出链接:http://blog.sina.com.cn/s/blog_54f82cc201013qii.html原创 2015-03-22 19:37:52 · 718 阅读 · 0 评论 -
子类、父类之间实现函数重载
大家都知道C++中函数重载只能在同一个类中,因为子类中的函数会遮掩住父类中的同名函数。但是使用using 申明式可以使得父类中的同名函数在子类中可见,从而实现函数重载。实现代码如下所示:#include using namespace std;class Base{public:void fun(int data){cout}};class De原创 2016-06-18 10:49:39 · 3363 阅读 · 0 评论 -
不同子类拥有基类的不同的静态成员变量的方法
大家都知道所有子类对象(不管是相同的子类或是不同的子类)拥有基类的相同静态成员变量。因为静态变量是属于类的,而不是属于某个对象的。所以如下代码:#include using namespace std;class Base{public:static int data;};int Base::data = 0;class Derivd:pub原创 2016-06-16 15:10:46 · 1796 阅读 · 0 评论 -
C++常见容器的迭代器类型
random accessIterator:vector,dequeue string。可以在常量时间内向前或者向后跳跃任意距离。Bidirectional Iterator:set,multiset,map,multimap。可以向前移动,也可以向后移动。原创 2016-06-14 15:41:52 · 533 阅读 · 0 评论 -
template中 class和typename的区别
1.申明template参数时,前缀关键字class和typename没有区别。2.请使用关键字typename标志嵌套从属类型名称; 但不得在base class lists或者成员初始列内以它作为base class修饰符。原创 2016-06-10 16:42:45 · 571 阅读 · 0 评论 -
std::tr1::function, std::tr1::bind的使用
相比于函数指针,std::tr1::function 能够兼容此签名函数式类似的可调用物,包括:普通函数、函数对象、成员函数。实例代码如下:#include #include using namespace std;class Object{public:std::tr1::function fun_ptr;};class Object2原创 2016-06-02 11:44:00 · 543 阅读 · 0 评论 -
编程注意事项
1.在实际的编程中处于效率考虑,应该尽量用移位运算代替乘除法运算。2.负数右移时,为了不改变移位之后的符号,最高位补13.一个整数(不管正数或者负数)与该整数减1的结果相与得到的结果相当于把该整数最右边的1变为0,很多二进制问题都可以用这个思路解决。4.清晰的书写,清晰的布局,合理的命名决定了代码的规范性。5.在计算机中判断两个小数是否相等时,我们不能直接用==来判断,因为在计算机原创 2015-09-02 11:44:52 · 556 阅读 · 0 评论 -
Vector 的拷贝构造函数
大家都知道拷贝构造函数调用的常见情形包括1.函数参数传递,函数实参到形参的过程中调用拷贝构造2.函数返回,函数返回一个对象时会调用拷贝构造函数3.对象定义时赋值 如 A a=b 这里b也是类A的一个对象vector中保存了很多对象的拷贝,当vector调用拷贝构造函数时,容器里面的对象都会被拷贝一份到新的容器里,如果容器中对象数目比较多,则这样的开销是十分昂贵的。但是看到一原创 2015-09-07 12:50:18 · 8448 阅读 · 0 评论 -
C++ 中4中类型转换关键字及其特点
今天看到一篇介绍四种类型转换介绍的非常详细的博文,先给出链接: http://blog.sina.com.cn/s/blog_4b20940201013ryp.html特别要提一下的是dynamic_cast和static_cast的区别,在向上造型(即派生类向基础类转换的过程)中两者区别不大;向下造型时,dynamic_cast添加了检测当前操作是否有效,实现了安全的向下造型,转载 2015-08-31 11:55:19 · 567 阅读 · 0 评论 -
C++中构造函数初始化列表为什么会比构造函数中赋值要高效
Test{Test(test& t1){this->t=t1;}private:test t;}相信很多人跟我一样,非常困惑为什么Test构造时会先调用test的构造函数,再调用test类的赋值操作符。那是因为赋值操作符不能产生新的对象,Test构造时免不了要构造一个test对象。所以正常流程是 先构造t,然后再调用赋值操作符赋值t(this->t=t1)。原创 2015-07-03 22:12:10 · 1975 阅读 · 1 评论 -
reactor模式和proactor模式
今天看到了几篇将的相当不错的博文,先注明出处:1.http://daimojingdeyu.iteye.com/blog/8286962.http://blog.youkuaiyun.com/caiwenfeng_for_23/article/details/84582993.http://blog.youkuaiyun.com/historyasamirror/article/details/5778378转载 2015-07-02 10:45:00 · 513 阅读 · 0 评论 -
变量的申明与定义
今天突然想到一个问题:在头文件(.h)文件中定义的变量 int a=13 为什么在其他的地方不能使用extern申明之后直接使用呢,这样不就可以避免include“.h”这种笨拙的方式了吗。网上查找了很多资料,都是众说纷纭。但是从这些博客中可以得出这么一个结论:在头文件中只能申明变量,而无法定义变量。变量的定义需要在源文件(.cpp)中进行。变量的申明和定义最大的区别在于是否存在内存的分配。但原创 2015-06-11 16:33:06 · 814 阅读 · 0 评论 -
windows下动态链接库的创建和使用
动态链接库:顾名思义,程序运行时动态加载的库。将程序中的某些模块用动态链接库的方式发布,可以有效的减少可执行文件(.exe)的容量,实现模块与程序的分离。使用动态链接库时最重要的是 .h头文件 .lib引入库文件 .dll文件:.h文件包括类或者变量的申明,.lib文件包括包括该dll导出的变量或者函数的符号名,dll文件包含该DLL实际的函数和数据。在使用动态库的情况下,在编译连接和执行文件原创 2015-06-27 10:40:41 · 897 阅读 · 0 评论 -
boost内存管理机制
boost主要是通过六种智能指针来管理内存的:scoped_ptr scoped_array shared_ptr shared_array weak_ptr intrusive_ptr。他们都是轻量级的对象,速度与原始指针相差无几,对于所指的类型T也仅有一个很小且很合理的要求:类型T的析构函数不能抛出异常。原创 2015-06-14 11:00:25 · 647 阅读 · 0 评论 -
C++中赋值操作符为什么要返回引用类型
class Test{ Test& operator= (const Test& t) { }}这个是我们熟悉的赋值操作符函数的格式,但是该函数为什么非得要返回一个引用呢。查阅了很多资料感觉这种解释比较靠谱:Test a,b,c;a=b=c这里存在连续赋值,这是符合C++的语法规范的。如果赋值操作符返回一个引用类型原创 2015-06-18 10:42:37 · 3691 阅读 · 3 评论 -
C++虚继承与普通继承的区别
虚继承的时候在子类的对象中会多出一个叫虚类指针的大小,有的资料说这个指针指向的内存里面包含了该子类的偏移量和到基类的距离。但是我跟踪过这段内存,发现里面的数据没有规律,也找不到更多的支撑材料,权且先知道子类的对象里面会有这么一个东西吧。先总结虚拟继承中比较特殊的地方,希望能够对大家有所帮助:虚继承时子类的虚函数不再是添加到父类部分的虚表中,而在普通的继承中确实直接添加到父类的虚表中,这就意原创 2015-04-16 15:54:17 · 4173 阅读 · 0 评论 -
C++中成员变量 父类 子类构造析构顺序
c++中对象都是先构造成员变量,再调用自身的构造函数;故父类成员变量首先被构造,然后调用父类的构造函数,再构造子类的成员变量,最后调用子类的构造函数。对象析构时与构造顺序相反,子类先调用自身的析构函数,再调用子类成员变量的析构函数,再调用父类的析构函数,再析构父类的成员变量。测试代码如下:#include using namespace std;class Test原创 2015-03-25 18:46:49 · 7708 阅读 · 1 评论 -
C++中编译器必须为未申明constructor的class合成一个default constructor的几种情况
1.带有Default Constructor的Member Class Object: 合成出来的default constructor主要是为了能够调用 Member Class Object的default Constructor2.带有Default Constructor的Base Class: 合成出来的default Constructor主要是为了能够调用Base Cl原创 2016-06-23 11:22:15 · 859 阅读 · 0 评论