12 2011 档案
摘要:实在惭愧,想要申请指向一个类的连续的批量的内存,尽然不知道怎么申请……1 基本类型的申请 //申请连续的10个指向int类型内存 int *pArray = new int(10);2 结构体和类class A{public: A(int a){}private: int x;};//申请10个连续的指向A对象的内存pA = new A[10]; //error 无默认构造函数pA = new A[10](0); //error 不支持class A{public: A(){} A(int a...
阅读全文
摘要:Prototype一 意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。二 动机 在图形编辑器中增加音符编辑构造乐谱编辑器的例子中。GraphicTool作为图形编辑器的框架,其中提供了可以添加的图形;Graphic作为图形类的基类,新增加的音乐相关符号也都从Graphic派生。要实现乐谱构造器,需要新增加图形,供GraphicTool添加使用。 如果仅仅是增加新的Graphic派生类,并且再对每一个Graphic实现copy自己。我想了很久也不知道怎么去实现……增加了新的Graphic派生类,但是GraphicTool仍然是不知道增加了新的图形,要么扩展Grap...
阅读全文
摘要:static_cast与dynamic_cast转换 一 C语言中存在着两种类型转换:隐式转换和显式转换隐式转换:不同数据类型之间赋值和运算,函数调用传递参数……编译器完成char ch;int i = ch;显示转换:在类型前增加 :(Type)变量 对变量进行的转换。用户显式增加char *pc = (char*)pb;void *ps = (void*)pa;二 C++中的类型转换 通过这两种方式,C语言中大部分的类型转换都可以顺利进行。至于能不能进行转换,转换后的结果如何,编译器不管需要用户自己去控制。 C++继承了C中的隐式和显式转换的方式。但这...
阅读全文
摘要:内存管理与智能指针 C++中不具备对内存的自动管理机制,垃圾回收机制。内存管理是一件复杂的事情和重要的事情,面对庞大的对象群,复杂的逻辑,甚至多线程中,是不能保证对象的每一次使用都正确,申请的内存都能被合理的释放。但是又必须确保这件事情的正确执行,否则系统将无法正常的工作。 最近在学习平台上的一些感觉非常棒的设计方法和机制的应用,结果却不断的发现有太多的基于C++基础如模板,指针,虚函数等应用,而我却不甚理解,也感觉到C++这门语言是何其强大和深奥,不是学会了语法就能掌握的,灵活的应用才是最困难的和不易掌握的。 本篇将简单探究一下C++中所谓的智能指针问题。一 Boo...
阅读全文
摘要:一 函数指针 函数指针就是一个指向函数起始地址的指针变量。二 普通函数指针 C/C++语言中,函数相当于汇编中的参数入栈和调用proc,函数就是将这两个过程封装起来。函数名就代表函数的起始地址。要调用这个函数,就要找到对应的起始地址。有了起始地址就可进入带函数体中执行代码。下面看几个例子:typedef void (*Ps_Func0)(void); //指向返回值为void和无参的函数typedef void (*Ps_Func1)(int); //指向返回值为void和参数为int的函数typedef void (*Ps_Func2)(int,int); ...
阅读全文
摘要:C++类中成员变量的初始化有两种方式: 构造函数初始化列表和构造函数体内赋值。下面看看两种方式有何不同。 成员变量初始化的顺序是按照在那种定义的顺序。1 内部数据类型(char,int……指针等)class Animal{public: Animal(int weight,int height): //A初始化列表 m_weight(weight), m_height(height) { } Animal(int weight,int height) //B函数体内初始化 { m_weight = weig...
阅读全文
摘要:析构函数 Destructor 当一个对象的生命周期结束(超出范围或者主动释放)时, 调用对象的析构函数来回收其所占用的存储空间(对象,动态内存等)和资源(信号量,互斥锁等)。一 普通虚构函数class ConcreateObject: public object{public: ~ConcreateObject();};//使用 范围{ ConcreateObject cObj;} ------------->//cObj生命结束 析构函数被调用 ~ConcreateObject()//手动释放ConcreateObject *pCObj = new ConcreateO...
阅读全文
摘要:Templates定义一个模板使用的关键字:class和typename。在定义作为模板的时候:class和typename,作用是一样的出处:http://www.cplusplus.com/doc/tutorial/templates/一 函数模板1 定义方式template <class identifier> function_declaration; template <typename identifier> function_declaration;2 Exampletemplate <class T>T GetMax (T a, T b){
阅读全文