摘要: const 引用: 在初始化常量引用时,允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可。尤其,允许为一个常量引用绑定非常量的对象、字面值,甚至是一个表达式。我们来看 const 引用的分析:#include int main(int argc, char* argv[]){ ... 阅读全文
posted @ 2014-09-18 15:28 厕所门口~~ 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 在一般教材里面,我们会说引用是变量的别名,另外在 c++ primer 5里面说到引用的时候,说引用不是对象,不能对它进行取地址。但是我们来看看下面代码的分析: 1 #include 2 3 int main(int argc, char* argv[]) 4 { 5 int i = ... 阅读全文
posted @ 2014-09-18 11:31 厕所门口~~ 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 在读取一个bmp图像的时候,我们会将它的大小读取出来,如果还不清楚bmp的文件结构,那就先看一下这篇博客。看完我将假设你已经明白所表示的意义。那么,对于bfSize, 它的表示数字为 50 00 00 00. 根据PC的显示习惯(其实就是小端存储规则),那么其真实值应该是00 00 00 50。 那... 阅读全文
posted @ 2014-08-10 11:07 厕所门口~~ 阅读(653) 评论(0) 推荐(1) 编辑
摘要: 看一本比较简略的java教程,在看到对象的时候,书上直接给我来一句: 刚看下觉得没什么问题,很有道理的一个东东嘛,但是出于习惯还是打了几行代码测试了一下,代码如下: 1 class Person { 2 private String name; 3 ... 阅读全文
posted @ 2014-07-16 11:35 厕所门口~~ 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 这里记录一下mac下安装android比较快捷的方法首先,到这里下载Android SDK,这个是集成的,所有工具一应俱全,免去了下载一堆东西的烦恼。具体包括如下:Eclipse + ADT pluginAndroid SDK ToolsAndroid Platform-toolsThe lates... 阅读全文
posted @ 2014-07-10 00:28 厕所门口~~ 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 看了好几处关于builder模式的书和博客,总感觉不是很清楚,感觉不少书上的说的也不是很准确。最后还是看回圣经《设计模式》。看了好久终于感觉明白了一点了。意图:builder模式提出的目的就是为了解决将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不的表示的问题。我们来看一个例子: 假设我们要画一些人,例如游戏里面的各类人。一般情况下,人有头,手,腿。但是在游戏里面,人可能没有手,也可能不止两只手。即所谓的三头六臂。如下: 那么,在这种情况下应该怎么去生产这些人? 一开始可能会用这个思路:抽象出一个人的基类,然后不同的人继承自这... 阅读全文
posted @ 2014-02-12 18:36 厕所门口~~ 阅读(2368) 评论(0) 推荐(1) 编辑
摘要: 单例模式是为了解决唯一对象实例问题而提出来的,许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。或者像是一个系统的管理员,由唯一一个管理员来管理各种数据的存取等。实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用 阅读全文
posted @ 2014-02-12 10:29 厕所门口~~ 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 在有继承层次类的时候,我们已经知道析构函数应该是虚函数,但很多人对构造函数和赋值操作符应不应该是虚函数并不清楚。首先,构造函数不能是虚函数,因为构造函数是在对象完全构造之前运行的,在构造函数运行的时候,对象的动态类型还不完整。对于赋值操作符,虽然可以在基类中将成员函数operator=定义成虚函数,但这样做并不会影响派生类中赋值操作符的使用。因为每个类有自己的赋值操作符。每个类的赋值操作符都有一个和类本身类型相同的形参,该类型必须不同于继承层次中任意其他类的赋值操作符的形参类型。因此子类的赋值操作符和基类的赋值操作符并不是同一个。但是,在这个子类中仍然有基类的那个操作符,但不是赋值操作符。将赋 阅读全文
posted @ 2014-02-12 00:16 厕所门口~~ 阅读(884) 评论(0) 推荐(0) 编辑
摘要: 说到虚析构函数,我们先来看看析构函数的作用:在删除指向动态分配对象的指针时,需要运行析构函数在释放对象的内存之前清除对象。在处理继承层次的对象时,指针的静态类型可能与被删除对象的动态类型不符,可能会删除实际指向派生类对象的基类类型指针。怎么理解这句话呢,在有继承的时候,如果我们删除一个指向子类的基类类型的指针F,也就是说指针F的类型是基类,但这个指针指向子类。这个时候如果要删除这个指针,调用的应该是基类的析构函数。如下代码: 1 //base.h 2 3 #include 4 5 using namespace std; 6 7 class A{ 8 public: 9 A()... 阅读全文
posted @ 2014-02-11 23:52 厕所门口~~ 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 问题: 假设我们要开发一个游戏--打怪物,首先,游戏有分等级,假设有初级,中级两个个等级(就不用flappy bird模式了,那个比较特殊,对一个玩家来说是难以具有持久吸引力的!),不同的等级怪物也是不一样的,我们不妨假设初级为怪物A1, B1,中级为怪物A2,B2。如图所示: 设计:那么根据面向对象思想,我们来考虑一下应该怎么设计程序结构,首先不同等级的怪物要由不同的对象来产生,即相当于不同等级的怪物也应该由不同类型的工厂来生产。但不同等级的怪物都是怪物,它们具有某些共同点,应该继承自同一个父怪物类。同样,不同等级的工厂也应... 阅读全文
posted @ 2014-02-11 23:08 厕所门口~~ 阅读(1343) 评论(0) 推荐(0) 编辑