C/C++
jofranks
这个作者很懒,什么都没留下…
展开
-
【C/C++学习】之二、static_cast和dynamic_cast、reinterpret_cast
C++提供了四个转换运算符:const_cast (expression)static_cast (expression)reinterpret_cast (expression)dynamic_cast (expression)dynamic_cast: 通常在基类和派生类之间转换时使用; static_cast: 一般的转换,如果你不知原创 2012-08-03 18:39:04 · 2710 阅读 · 0 评论 -
【C/C++学习】之十五、内存管理
索引:1、内存分配简介2、内存分配常见错误3、new()/delete()函数的使用4、malloc()/free()函数的使用在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候原创 2012-10-15 16:57:40 · 2078 阅读 · 1 评论 -
【C/C++学习】之十六、关于空指针NULL、野指针、通用指针
首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了。假设 有语句 int a=10;那么编译器就在内存中开辟1个整型单元存放变量a,我们假设这个整型单元在内存中的地址是 0x1000;那么内存0x1000单元中存放了数据10,每次我们访问a的时候,实际上都是访问的0x1000单元中的10.现在定义:int *p; p原创 2012-10-19 10:56:57 · 4125 阅读 · 0 评论 -
【C/C++学习】之八、虚函数与纯虚函数
virtual 面向对象,他的多态性是如何体现的呢 那就要看我们的虚函数了, 我们的虚函数是我们在基类里面声明了一些能够在各个派生类里面重新定义的函数。编译器和装载程序能够保证对象和应用于他们的函数之间的正确的对应关系。C++中,虚函数起了很大的作用,类中至少有一个虚函数的时候,类就会构造出一个虚函数表来指示这些函数的地址,假如继承该类的子类定义并实现了原创 2012-08-19 19:32:48 · 1463 阅读 · 0 评论 -
【C/C++学习】之十二、++i与i++的区别
大家都应该知道i++和++i的区别,前者是先使用i的值,然后再增加1,而后者是先增加1然后再使用i的值。但是i++和++i那个更好呢? 我们通过程序来比较一下:#includeusing namespace std;class I{public: I(); ~I(); I(const I &i); I& operator=(const I &i);原创 2012-09-29 11:33:17 · 2572 阅读 · 4 评论 -
【C/C++学习】之十三、虚函数剖析
所谓虚函数,虚就虚在“推迟联编”或者“动态联编”上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被称为“虚”函数。而什么是动态联编呢? 编译程序在编译阶段并不能确切地知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切地知道将要调用的函数,要求联编工作在程序原创 2013-07-26 16:10:18 · 1541 阅读 · 0 评论 -
【C/C++学习】之十七、C++11中我们需要关注的
学了这么久c++,现在来看一下c++新标准:C++11他的设计目标是:1.使得c++成为更好的适用于系统开发及库开发的语言。2.使得c++成为更易于教学的语言。3.保证语言的稳定性,以及和C++03及c语言的兼容性。c++11 的增强点,主要包括:1.通过内存模型,线程,原子操作等来支持本地并行编程。原创 2013-12-19 17:03:29 · 4544 阅读 · 2 评论 -
【C/C++学习】之十四、RTTI
RTTI(Runtime TypeIdentification)提供了运行时确定对象类型及转换指针或引用类型的方法。 有关内容包括类名称,数据成员名称与类型,函数名与类型等。在大多数面向度地向专家传播自己设计理念时,都主张在设计和开发中使用虚拟成员函数而不是使用RTTI机制,但是再很多情况下虚拟成员函数无法克服本身的局限。每当涉及处理异类容器和根基类层次时,不可避免要对对象类型进行动态判原创 2012-10-14 19:23:29 · 2113 阅读 · 0 评论 -
【C/C++学习】之十、CRT
今天听到CRT这个词,又听说:main 是应用程序的入口点,但是不是应用程序起来调用的第一个函数,在这之前由crt来调用main函数。现在就来看一下CRT是什么?来看一下://////////////////////////////////////////////////////////////////////////////////////////////////////////////原创 2012-09-22 14:44:31 · 5618 阅读 · 0 评论 -
【C/C++学习】之十三、运算符重载
所有一元运算符 建议重载为成员函数= () [] —> 只能重载为成员函数+= -= /= *= |= ~= %= >>= 所有其他运算符 建议重载为全局函数. 操作符不能重载不能重载目前C++运算符集合中没有的符号 原因:1。难以理解 2.难以确定优先级对已经存在的运算符进行重载时,不能改变优先级规则,否原创 2012-10-11 22:00:35 · 1787 阅读 · 0 评论 -
【C/C++学习】之四、static_cast
用法:static_cast ( expression ) 《C++primer 第四版》中说编译器隐式执行的任何类型转换都可以由static_cast显式完成!要注意的是,此转换没有运行时检测安全!他不能转换掉expression的const、volatile、或者__unaligned属性。他也不是用来去掉static属性的! 大家应该清楚stat原创 2012-08-05 13:02:43 · 19482 阅读 · 1 评论 -
悬挂else
在C语言中可以看到这样一种形式的代码:if (a > 0) if (b > 0) printf("~~~~~");else printf("!!!!!!!!!");问题就出来了,这个else 到底是和那个if搭配?也许在这里容易发现,但是 如果是大块的代码嵌入到了类似这样的框架中,那么寻找起来是很麻烦的! 其原创 2012-08-05 15:45:44 · 4826 阅读 · 3 评论 -
【C/C++学习】之三、const_cast
用法:const_cast (expression)此运算符是用来消除类型的const和volatile属性的。看到const_cast的你应该知道,他是用来转换掉表达式的const性质的。对也,只有使用我们的const_cast才能将const性质转换掉!ok,我们来看一段代码: const char m = 't'; const原创 2012-08-04 14:45:15 · 5274 阅读 · 2 评论 -
【C/C++学习】之六、reinterpret_cast
reinterpret_cast (expression)reinterpret_cast是强制类型转换符!他是用来处理无关类型转换的,通常为操作数的位模式提供较低层次的重新解释!但是他仅仅是重新解释了给出的对象的比特模型,并没有进行二进制的转换!他是用在任意的指针之间的转换,引用之间的转换,指针和足够大的int型之间的转换,整数到指针的转换,在家面的文章中将给出!原创 2012-08-07 15:25:58 · 13961 阅读 · 1 评论 -
【C/C++学习】之五、dynamic_cast
dynamic_cast (expression)可以安全的将类的指针或者引用沿着他们的继承层次转换! 但是指针必须有效,必须为0(可以对值为0的指针应用dynamic_cast,结果仍然是0)或者指向一个对象! 他只接受基于类对象的指针和引用的类型转换!在类层次上进行转换的时候 dynamic_cast于static_cast的效果一样!他返回一个新类型的值,或者会抛出一原创 2012-08-10 20:40:24 · 4440 阅读 · 0 评论 -
【C/C++学习】之一、指针和引用的区别
作者:jofranks 原创作品,转载请标明出处!版权所有,侵权必究!来源:http://blog.csdn.net/jofranks★ 相同点:都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。★ 区别:1. 指针是一个实体,而引用仅是个别名;2. 引用使用时无需解引用(*),指针需要解引用;3. 引用只原创 2012-07-30 21:25:12 · 3996 阅读 · 7 评论 -
【C/C++学习】之十一、指针一些事
先来说一下指针的命名:我们声明指针变量的时候,建议用“ptr”来开头,这样是一种好的习惯,可以让你看到这个变 量就知道他是一个指针变量。也要注意给指针添加必要的注释。先来看看内存: 内存是以字节为单位的一片连续的存储空间,这些单元都有自己的编号,这就是内存地址。操作系统通过内存地址来实现对内存的管理。原创 2012-09-27 11:06:36 · 2182 阅读 · 0 评论 -
【C\C++学习】之十八、C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
在C++中,有三大函数复制控制(复制构造函数,赋值操作符,析构函数),而在C++11中,加入了移动构造函数,移动赋值操作符。我就斗胆将他们命名为六大函数好了。一、构造函数c++primer中说过:构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数。构造函数的工作就是保证每个对象的数据成员具有合适的初始值。构造函数与其他函数不同:构造函数和类同名,没有返回类型。构造函原创 2013-12-20 21:18:00 · 29263 阅读 · 6 评论