自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Kikim的地盘

莫道君行早,更有早行人!

  • 博客(24)
  • 资源 (2)
  • 收藏
  • 关注

原创 c++ 虚继承与继承的差异

前面一篇文章,说明了在C++ 虚继承对基类构造函数调用顺序的影响。经过仔细推敲,发现没有彻底说清楚虚继承与普通继承之间的关系。所以用下面的文字再说明一下。首先,重复一下虚拟继承与普通继承的区别有:假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误;假设derived 虚继承自base类,那么

2012-09-28 20:51:47 32356 3

原创 C++ 虚继承对基类构造函数调用顺序的影响

继承作为面向对象编程的一种基本特征,其使用频率非常高。而继承包含了虚拟继承和普通继承,在可见性上分为public、protected、private。可见性继承比较简单,而虚拟继承对学习c++的难度较大。首先,虚拟继承与普通继承的区别有:假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误;假

2012-09-28 15:57:37 14644 2

转载 cdecl、stdcall、fastcall函数调用约定区别

在C语言中,假设我们有这样的一个函数:    int function(int a,int b)    调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么

2012-09-26 17:45:41 994

原创 c++ 继承机制易犯的错误

继承作为面向对象的基本特征之一,其使用率极高。不管是为了实现软件的基本功能,还是再程序的重构的过程中,我们总是会用到继承机制。正是因为其用途极为广泛,而且使用简单,大众程序员对其真正的内部实现机制的探究不是很深。而且,在大部分情况下,我们对继承的使用方法是错误的。下面用例子来说明问题。class Animal { public: Animal &operator=(

2012-09-19 17:05:10 1405

原创 c++ reference counting引用计数原理

我们都知道,c++最令人头疼的问题也是被其他语言鄙视的问题——指针管理。而引用技术能够让上面的简化了不少。下面说说c++引用计数的设计原理。        引用计数的两个动机:                1. 简化heap对象周边的记录工作。对于分配在heap中得内存,如果没有显式delete它,那么就会常驻在内存区间,引起内存浪费。而且在heap对象的所有权会随着复制和赋值出现转移,

2012-09-18 21:29:51 1983

原创 c++ 嵌套new操作构造对像的执行顺序

突然比较好奇如果在某中class对象在拷贝构造时的函数调用顺序,下面用代码说清楚我的问题:       定义class object,class object { public: ... protected: ... private: ...}上面定义一个object类,假设其操作都为默认

2012-09-16 18:06:33 1683

原创 c++ 实现static const对象在类声明中指定初值

在早期的c++ 编译器中无法在class的定义区为static const member(这里的member必须为整数类型int、char、enum等)赋初值,而晚些的c++编译器可能可以这么做。但是const member的使用习惯是在定义的时候赋值,并且在其他的地方不能改变其值。所以,这就形成了矛盾,使得我们大部分时候而不得不将放弃使用static const member。下面的代码即为此种

2012-09-16 17:08:45 1902

原创 c++ inlineing内联函数不要使用static对象

我们知道inline内联函数的效率比一半函数的效率要高,而在绝大部分的c+编译器将函数优化为内联函数。而内联函数是不是万能的呢?如果与内联函数与static对象结合使用会出现什么样的效果呢?下面将具体分析分析。       内联函数的作用是将函数体部分在编译器展开,类似与宏的效果,而不像普通的函数一样会用到局部堆栈对象,以及保存函数进入、返回地址。因此内联函数的效率比一半函数高。 正是由于这种

2012-09-16 16:28:09 2849 2

原创 c++ shared_ptr智能指针使用注意事项

shared_ptr在boost中地位相当重要,其行为最接近原始指针,但又比指针更加安全,甚至还能提供基本的线程安全保证。它基本上解决了在使用c++开发过程中不可避免的使用指针而遇到的许多问题,常见的毫无疑问是内存泄漏和内存的提前释放,还有一些关于指针内存申请而产生的异常问题等。而要想较好的使用shared_ptr来完全取代指针绝非易事。下面简要说说使用shared_ptr需要注意的问题。

2012-09-16 15:04:09 12314 1

原创 c++ static的作用,以及static对象在类和函数中区别

static对象如果出现在类中,那么该对象即使从未被使用到,它也会被构造以及析构。而函数中的static对象,如果该函数从未被调用,这个对象也就绝不会诞生,但是在函数每次被调用时检查对象是否需要诞生。下面详细说说static的功能以及它的来龙去脉:static作为编程语言里面一种重要的数据类型,它的地位在面试的过程里也是相当的高。为什么要引入static  函数内部

2012-09-13 21:38:23 21291 5

原创 c++ 将构造函数虚化,动态产生对象

我们知道构造函数有一个必须遵守的规则,即构造函数不能定义为虚函数。但有一个具体的应用是要求是在不同的场景下通过一个指针或者引用生成不同的对象,这就类似于类型的动态生成,即在执行期才能确定具体的对象。这怎么实现呢?         下面我们介绍两种方法:         1.不管是在effective c++ 还是在设计模式中,提到的一种特别的替代继承的方法,即组合。采用组合的方法来实现构造

2012-09-13 21:21:33 1480

转载 IOS UIKIT框架类之窗口和视图架构介绍!

窗口和视图窗口和视图是为iPhone应用程序构造用户界面的可视组件。窗口为内容显示提供背景平台,而视图负责绝大部分的内容描画,并负责响应用户的交互。虽然本章讨论的概念和窗口及视图都相关联,但是讨论过程更加关注视图,因为视图对系统更为重要。视图对iPhone应用程序是如此的重要,以至于在一个章节中讨论视图的所有方面是不可能的。本章将关注窗口和视图的基本属性、各个属性之间的关系、以及在

2012-09-12 11:52:41 1492

转载 IOS UIKIT框架类之视图动画和坐标系介绍!

Core Animation基础Core Animation利用了硬件加速和架构上的优化来实现快速渲染和实时动画。当视图的drawRect:方法首次被调用时,层会将描画的结果捕捉到一个位图中,并在随后的重画中尽可能使用这个缓存的位图,以避免调用开销很大的drawRect:方法。这个过程使Core Animation得以优化合成操作,取得期望的性能。Core Animation把和视

2012-09-12 11:50:31 1601

原创 iOS 真机测试 Code Sign Error: Provisioning Profile can't be found 问题解决方法

从同事那里拷贝过来一份程序,安装好了证书(即扩展名为.p12的文件)以及devices的Provisioning Profile文件(即扩展名为.mobileprovision的文件)。结果真机运行还是会出现下面的错误:          解决方法:          Code Sign Error: Provisioning Profile can't be found.

2012-09-11 13:03:13 5237

原创 操作系统的实质

操作系统的形态各种各样,其功能也是千奇八怪。对于个人而言,操作系统的开发似乎越来越遥远。操作系统所需要的功能越来越多,安全性越来越重要。不过操作系统再怎么发展,还是逃不过linux系统发明人Linus Torvalds的自传《Linus Torvalds自传》中提到的关于Unix系统的实质,其功能简要概括为:   "你在UNIX上完成的大部分任务都是通过六个基本操作完成的,它们被称作"系统

2012-09-07 13:55:04 1350

原创 new/delete operator和operator new/delete

关于new/delete存在两种情况,一种是new/delete operator和operator new/delete。那么两者有什么区别呢?     我们一般使用的new/delete都是语言内建的操作符,即new operator,类似于sizeof,所以被改变意义,它是不可以重载的,总是完成相同的功能。并且它的功能分为两个方面:     1.分配足够的内存来放置某类型的对象;

2012-09-05 18:51:03 1017

原创 c++ 隐式转换带来的问题

编译器经常会背着我们做一些我们不希望发生的事情,最典型的是隐式转换。不过庆幸的是,编译器只会帮助我们进行一次转换,而不会无休止的隐式转换,直至满足条件为止。例如,下面先定义一个Array模板类:templateclass Array { public: Array(int lowBound,int highBound); Array(int size); T&

2012-09-05 17:18:37 1519

原创 c++ 不要以多态的方式处理数组

数组元素的获取其实就是数组的头指针加上偏移量来获得数组的某个元素,即例如数组array[10],而数组头指针地址为array,每个元素的size为sizeof(array[0]),那么array[2]的地址为array+size*2。而对于多态的方式作为数组的具体元素,那么会出现某个元素定位不准的情况。例如base类的大小sizeA,而继承类的大小一般都会比base类要大。如果现在存取数组元素,虽

2012-09-05 15:56:05 1522

原创 c++ 指针point 和引用reference的区别

1.reference一定得代表某个对象,即reference必须有初值;而point没有这种要求,因此它可以有null pointers。2.没有所谓得null reference意味着references可能会比使用pointers更有效率,因为使用reference之前不需要测试其有效性。3.pointer可以被重新赋值,指向另外一个对象,而reference却总是指向它最初获得的那

2012-09-05 15:10:39 2520

原创 软件迭代开发的痛苦与乐趣

在软件开发过程中,我们不可能一开始就实现软件系统所需要的所有功能。反之,我们应该只去实现今天的用户故事,然后重构,明天再扩展系统、实现新的用户故事。虽然这是迭代和增量敏捷的精髓所在。但是这种开发过程又是比较痛苦的,它要求程序员不断的根据系统架构需求来完善功能,而在系统架构上每一次的更新意味着程序员需要对前面的代码进行比较大的修改。这时候成员开始骂人了。          如何解决这个普遍存在的

2012-09-05 10:43:46 2136

原创 用代码的角度看C++虚函数、虚继承的影响

一直以来,c++的虚函数以及虚继承令人讨厌。下面通过程序彻底了解c++的虚函数以及虚继承。#include using namespace std;//查看虚函数表classB{};classB1{public:B1(){cout<<"B1 constructor"<<endl;};//构造函数不能为virtual函数};classB2:public B1{publi

2012-09-04 22:07:39 892

原创 iOS 5的StoryBoard功能

苹果每一次推出新功能可以说都是一次比较大的变革,真的很难有人能够跟上它的节奏。iOS4.3 SDK刚开始有些理解了,iOS5就发布了,iOS的新功能刚熟悉,这不iOS6又要发布了。不管怎么样,还是先学习学习iOS5吧!在iOS5中,一个比较特别的功能是StoryBoard,它的目的是代替历史悠久的NIB/XIB(其实StoryBoard还是基于NIB/XIB的,不过开发人员已经无需直接跟NIB

2012-09-04 18:48:46 2180 1

原创 软件与建筑发展杂谈

软件系统与建筑物的构造本来是两个八辈子打不着的两个领域,但是在《clean code》的作者Robert Martin看来,两者的关系是如此紧密。        建筑物的构造者与使用者十有八九是两类人,而软件系统同样如此。因此在软件系统的编成过程中,程序设计者不能期望更不能苛求软件用户熟悉软件的编写过程,也绝对不允许使用者对软件进行修改,这与建筑物的要求完全一样。        而建筑物的

2012-09-04 17:47:05 1417

原创 面向对象程序设计不得不知的Demeter定律

在面向对象程序设计的世界里,我们不得不时刻牢记“The Law of Demeter”。下面说说Demeter定律的基本意思:        1. 模块不应了解它所操作对象的内部情形,亦即对象必须隐藏数据,暴露操作。这么做的好处是,对象操作时的形式一直性,不会出现有的访问出现操作,有的访问出现数据;         2.更深层次的理解,类的某一个内部方法只能调用的方法有:

2012-09-02 20:29:12 2027

VHDL语言编的8位数字频率计,绝对的好!!!

VHDL语言编的8位数字频率计,绝对的好!!! 里面提供图片还有一些好的东西。。。

2008-10-10

数字系统设计(如:音乐发生器等)实例

里面含有数字系统设计实例,例如: 1. 半整数分频器的设计 2. 音乐发生器 3. 2FSK/2PSK信号产生器 4. 实用多功能电子表 5. 交通灯控制器 6. 数字频率计

2008-10-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除