2017年5月25日

摘要: Stackoverflow中提出了这样一个问题:假设我们实现了一个User类,Library类,现在Library类中utility需要回调User中func方法,总结答案,常见的几种方法如下: 下面则是非常规方法。 基于tag dispatch的调用方法,利用空类实现标签回调,在注册方法时提供不同 阅读全文
posted @ 2017-05-25 18:15 kkford 阅读(4597) 评论(0) 推荐(0) 编辑

2017年3月29日

摘要: 在C++中,隐式转换主要涉及以下情况: 1)形参对象传递 此时C++需通过临时变量将对象转换为引用后传递,如: 2)返回值传递 3) 类型隐式转换,此种情况如下: 综合测试程序如下: 阅读全文
posted @ 2017-03-29 18:05 kkford 阅读(347) 评论(0) 推荐(0) 编辑

2016年12月18日

摘要: C++一个对象构造的完整过程为:分配内存和初始化,这也是new关键字所实现的功能,分配内存可通过重载new操作符来实现,系统初始化可通过调用构造函数来完成。我们不能改变new关键字的功能,但可以改变分配内存的方式。 new操作符的重载默认有一个分配内存大小的形参,但可根据实际需要来增加新的参数。 这 阅读全文
posted @ 2016-12-18 22:39 kkford 阅读(241) 评论(0) 推荐(0) 编辑
摘要: C++中的捕获异常机制catch参数中实参的类型不同,采取的处理方式则不相同,且与普通的函数调用还不一样,具体表现为当抛出异常throw A()或throw obj时,对象会进行一次额外的对象复制操作。 测试类实现如下: 1) 当采用对象传递方式捕获异常时,在对象中会发生两次复制操作,一次为对象a复 阅读全文
posted @ 2016-12-18 22:36 kkford 阅读(3066) 评论(0) 推荐(0) 编辑

2016年7月1日

摘要: 在实际开发项目中,我们通常将一个工程划分为多个文件夹,每个文件夹代表不能的功能,如:我的一个项目cpl,它分为两个文件夹:src和test。当在cpl文件夹中运行make的时候,它的一级目录都会自动运行各自文件夹中的Makefile,cpl文件夹中的Makefile需要定义一些编译变量,如:包含的库 阅读全文
posted @ 2016-07-01 19:40 kkford 阅读(651) 评论(0) 推荐(0) 编辑

2016年5月8日

摘要: 深入理解C++中第七章提到模板实例化参数的选择:函数的决议结果只和函数参数有关和返回值无关。记录一下。 测试程序如下: 测试结果如下: int foo double foo 当模板有实例化具体类型时,才产生具体的对象类图: 阅读全文
posted @ 2016-05-08 16:54 kkford 阅读(725) 评论(0) 推荐(0) 编辑
摘要: C++中对象数组创建时,主要注意的点有:虚函数和带参数的构造函数,当出现虚函数时,对象数组中如通过父对象指向子对象,因为需要做Slice,析构时会造成指针错误引发内存泄露。测试程序如下: 如出现下列方式使用对象: A *pa = new B[2]; delete[] pa; Valgrind检测会造 阅读全文
posted @ 2016-05-08 16:52 kkford 阅读(167) 评论(0) 推荐(0) 编辑

2016年4月20日

摘要: 在涉及到虚函数的情况下,C++构造函数的构造顺序为:先调用构造函数,虚表指针初始化,用户代码;如涉及到多重继承情况,初始化顺序为基类、子类(从左至右),假设一个类的继承情况如下图,其初始化顺序为:Point,Point3d,Vertex,Vertex3d,PVertex,而这样的调用顺序说明在构造函 阅读全文
posted @ 2016-04-20 09:03 kkford 阅读(956) 评论(0) 推荐(0) 编辑

2015年10月15日

摘要: C++多重继承下,对象布局与编译器,是否为虚拟继承都有很大关系,下面将逐一分析其中的差别,相同点为都按照类继承的先后顺序布局(类内按照虚表、成员声明先后顺序排列)。该类情况为子类按照继承顺序排列,如class C:public B,public A此种情况布局如下:如果class B,A带有虚函数,... 阅读全文
posted @ 2015-10-15 08:37 kkford 阅读(568) 评论(0) 推荐(0) 编辑

2015年8月9日

摘要: 在C++中对象的内存布局与类成员声明的顺序一致,静态成员放在数据区(Data Section)而非对象内存中,若多个类静态成员名称相同,C++则按照name mangling技术进行重命名保证名称的唯一性。若类之间发生了继承关系(无虚拟指针无虚继承)时,按照基类、子类成员顺序排列,另在C++对象复制... 阅读全文
posted @ 2015-08-09 15:15 kkford 阅读(341) 评论(0) 推荐(0) 编辑

导航