【语言】
Kevin_Leong
这个作者很懒,什么都没留下…
展开
-
c++对象模型研究3:数据
开始前先看看class X {};class Y:public virtual X {};class Z:public virtual X {};class A:public Y,public Z {};上述X,Y,Z,A中没有任何一个class内含明显的数据,其间只表示了继承关系。按照书上的例子sizeof X = 1sizeof Y = 8sizeof Z = 8s原创 2016-06-16 12:01:35 · 970 阅读 · 0 评论 -
指向函数的指针数组
c里面的指针很重要,但学了c这么久了,都不知道指向函数的指针数组有什么用,其实和用函数指针差不多。我们可以创建一个有趣的结构式指向函数的指针数组。为了选择一个函数,只需要使用数组的下标,然后间接引用这个指针。这种方式支持表格式驱动码(table-driven code)的概念;可以根据状态变量(或状态变量的组合值)去选择被执行函数,而不用条件语句或case语句。这种设计方式对于要从表中添加原创 2012-08-22 15:21:31 · 1379 阅读 · 0 评论 -
改善程序与设计的具体做法(C++)
摘自《effective c++》习惯使用C++条款1:C++有哪些内容?C、C with Classes、模板、STL。条款2:尽量以const、enum、inline替换#define条款3:尽可能使用const条款4:确定对象使用前已先被初始化构造/析构/赋值条款5:了解C++默认编写原创 2012-09-26 09:51:11 · 1502 阅读 · 0 评论 -
c++对象模型研究4:函数
成员的各种调用方式一路走来,virtual函数貌似是用函数指针实现。或许虚函数掌握起来比函数指针要简单很多。貌似虚函数的性能要略低于函数指针。以我的理解,c偏向于算法设计,c++偏向于业务。非静态成员函数c++的设计准则之一就是:非static成员函数 要与一般的非成员函数有相同的效率。非static成员函数其实都是最后被编译器转化成非成员函数的原创 2013-08-21 10:21:45 · 1055 阅读 · 0 评论 -
c++对象模型研究5:构造、解构、拷贝
纯虚函数虚函数是为了重载和多态的需要,子类中可以重写或不重写该函数;纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像Java中的interface。无继承情况下的对象构造参考:《深度探索C++对象模型》http://blog.csdn.net/ChinaJane163/article/details/50119625员数据参考:《深度探索C++对象模型》http://blog.csdn.net/ChinaJane163/article/details/501原创 2014-03-05 17:06:22 · 1617 阅读 · 0 评论 -
c++对象模型研究6:执行期
C++的一件困难事情:不太容易从程序代码看出表达式的复杂度。执行期语意学,即在程序执行时,编译器产生而外的指令调用,确保对象的构造,内存的释放,以及类型转换与临时对象的生成的安全进行。对象的构造和析构一般而言,我们会把对象尽可能放置在使用它的那个程序区段附近,这样做可以节省不必要的对象产生操作和摧毁操作(主要是析构)。不建议把所有的对象放在函数或某个区段的起始处。原创 2016-06-20 20:23:33 · 1518 阅读 · 1 评论 -
c++对象模型研究7:站在对象模型的顶端
template在C++发明阶段,C++之父Stroustrup和贝尔实验室的C++小组对原先的宏方法进行了修订,对其进行了简化并将它从预处理范围移入了编译器。这种新的代码替换装置被称为模板,而且它变现了完全不同的代码重用方法:模板对源代码重用,而不是通过继承和组合重用对象代码。当用户使用模板时,参数由编译器来替换,这非常像原来的宏方法,却更清晰,更容易使用。未使用的tem原创 2016-06-21 14:44:44 · 616 阅读 · 0 评论 -
c++对象模型研究2:构造函数
关键词explicit之所以被导入这个语言,就是为了提供给程序员一种方法,使他们能够制止“单一参数的构造函数”被当做一个转换运算符。默认构造函数的构建操作以下四种情况类会被生成“有用的”默认构造函数a.一个带有默认构造函数的成员对象类 合成的默认构造函数是以inline的方式完成的,如果函数太复杂则会做成非inline的static实体b.带有默认构造函数的基类原创 2016-06-15 11:39:09 · 707 阅读 · 0 评论 -
STL源码分析:Containers
STL容器分两种:序列式容器,关联式容器。上图以内缩方式来表达基层与衍生层的关系。heap内含一个vector,priority-queue内含一个heap、stack和queue都含一个deque,set/map/multiset/multimap都内含一个RB-tree,hash_x都内含一个hastable。 序列式容器所谓序列式容器,其中的元素都可序(ordered...原创 2018-08-17 17:27:57 · 237 阅读 · 0 评论 -
c++对象模型研究1:关于对象
关于对象C++在布局以及存取时间上主要的额外负担是由virtual引起,包括1.虚函数机制(执行时绑定)2.虚基类。还有一些多重继承下的额外负担。C++对象模式在C++中,有两种类成员数据:static和非static,以及三种类成员函数:static、非static和virtual。在C++对象模型中,非static成员数据被配置于每一个类对象之内,static成原创 2016-06-14 14:55:55 · 612 阅读 · 0 评论 -
有效使用STL的经验
摘自《effective stl》关于STL的使用原则,以后还会再补充。容器条款1:仔细选择你的容器条款2:小心对“容器无关代码”的幻想条款3:使容器里对象的拷贝操作轻量而正确条款4:用empty来代替检查size()是否为0条款5:尽量使用区间成员函数代替它们的单元素兄弟条款6:警惕C++最令原创 2016-06-12 14:51:40 · 1242 阅读 · 0 评论 -
Boost程序库完全开发指南笔记
第1章 Boost程序库总论1.1关于Boost1.1.1 什么是BoostBoost库是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库。1.1.3 使用BoostBoost库的头文件与我们平常所用的头文件(*.h)或C++标准库头文件(没有后缀名)不同,它把C++类的声明和实现都放在了一个文件中,而不是分成两个文件,也就是“.h+.cpp”,故文件的后缀是.h原创 2013-06-25 17:50:50 · 1299 阅读 · 0 评论 -
STL源码分析:泛型编程与STL
定义抽象的concepts,并根据抽象的concepts来撰写算法与数据结构,是泛型编程的本质。运用STL时的几个最重要的观念:1.所谓使用STL,就是去扩充它。2.STL的算法和容器是独立分离的。3.无须继承。4.抽象化并不意味效率低。STL所实现的,是依据泛型思维架设起来的一个概念结构。这个以抽象概念为主体而非以实际类为主体的结构,形成了一个严谨的接口标准。在此接口下,任何组件都有最大的独立性...原创 2016-06-30 10:26:42 · 1680 阅读 · 0 评论