上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 38 下一页
dynamic_cast: 通常在基类和派生类之间转换时使用,run-time castconst_cast: 主要针对const和volatile的转换.static_cast: 一般的转换,no run-time check.通常,如果你不知道该用哪个,就用这个。reinterpret_cast: 用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。1)static_cast<T*>(a)编译器在编译期处理将地址a转换成类型T,T和a必须是指针、引用、算术类型或枚举类型。表达式static_cast<T*>(a), a的值转换为模板中指定的类型T。在运 Read More
posted @ 2011-02-23 16:39 BloodAndBone Views(643) Comments(0) Diggs(0) Edit
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变指针的指向就可以了。另外对于新添加的元素,Vector有一套算法,而List可以任意加入。Map,Set属于标准关联容器,使用了非常高效的平衡检索二叉树:红黑树,他的插入删除效率比其他序列容器高是因为不需 Read More
posted @ 2011-02-21 21:50 BloodAndBone Views(1529) Comments(0) Diggs(1) Edit
一.在c中分为这几个存储区 1.栈 - 有编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的> 另一块区域。- 程序结束释放 4.另外还有一个专门放常量的地方。 - 程序结束释放 二.在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 1.栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、 Read More
posted @ 2011-02-21 21:19 BloodAndBone Views(2132) Comments(3) Diggs(0) Edit
多态(Polymorphism)是面向对象的核心概念,本文以C++为例,讨论多态的具体实现。C++中多态可以分为基于继承和虚函数的动态多态以及基于模板的静态多态,如果没有特别指明,本文中出现的多态都是指前者,也就是基于继承和虚函数的动态多态。至于什么是多态,在面向对象中如何使用多态,使用多态的好处等等问题,如果大家感兴趣的话,可以找本面向对象的书来看看。 为了方便说明,下面举一个简单的使用多态的例子(From [1] ):View Code 例子中使用到多态的代码以黑体标出了,它们一个很明显的特征就是通过一个基类的指针(或者引用)来调用不同子类的方法。 那么,现在的问题是,这个功能是怎样实现 Read More
posted @ 2011-02-21 21:14 BloodAndBone Views(394) Comments(0) Diggs(1) Edit
在实际应用中,遇到这样的情况:已分配好了一块内存,需要在这块内存上面分配一个类对象。这时可以通过强制类型转换,把该内存块强制转换成类对象: class A{}; char *p = new char[100]; A *pA = reinterpret_cast<A*>(p); 但是,这样转换的话,类的构造函数就没有得到调用,类成员变量就没有被初始化。 这个时候我们可以使用placement new来操作: #include <iostream> using namespace std; #pragma pack(push, 1) class CTest { public Read More
posted @ 2011-02-18 15:22 BloodAndBone Views(374) Comments(0) Diggs(0) Edit
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 38 下一页