C++基础知识:成员函数的特性
我们已经知道什么是成员函数了,它是根据某种类的功能是需要来定义的。而构造函数、析构函数、拷贝初始化构造函数等都属于特殊的成员函数。成员函数除了说明和定义的类中之外,还有些什么特性呢? 内联函数和外联函数 类的成员函数可以分为内联函数和外联函数。内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。而说明在类体内,定义在类体外的成员函数叫外联函数。外联函数的函数体在类的实现部分。 内联函数在调用时不是像一般函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在...
浅议C++中的垃圾回收方法
许多 c 或者 c++ 程序员对垃圾回收嗤之以鼻,认为垃圾回收肯定比自己来管理动态内存要低效,而且在回收的时候一定会让程序停顿在那里,而如果自己控制内存管理的话,分配和释放时间都是稳定的,不会导致程序停顿。最后,很多 c/c++ 程序员坚信在c/c++ 中无法实现垃圾回收机制。这些错误的观点都是由于不了解垃圾回收的算法而臆想出来的。 其实垃圾回收机制并不慢,甚至比动态内存分配更高效。因为我们可以只分配不释放,那么分配内存的时候只需要从堆上一直的获得新的内存,移动堆顶的指针就够了;而释放的过程被省略了,自...
数据结构学习(C++)之双向链表
原书这部分内容很多,至少相对于循环链表是很多。相信当你把单链表的指针域搞清楚后,这部分应该难不倒你。现在我的问题是,能不能从单链表派生出双向链表? <?xml:namespace prefix = o ns = \"urn:schemas-microsoft-com:office:office\" /> 你可以有几种做法: 一种就是先定义一个双链节点--但是,它的名字必须叫node,这是没办法的事;不然你就只好拷贝一份单链表的实现文件,把其中的node全都替换成你的双链节点名字,但是这就不叫继承了。 另...
C++中的自加的使用及注意事项
比如说(x++)+(++x)+(x++) 这个的结果与我们意料到的结果不太一样 这个问题建议不要过于钻牛角尖了,因为不同的编译器会出现不同的结果 如果x初始值为4,那么结果会有如下几个 1。按照右结合,从左向右计算,4+6+6=16 2。按照括号优先,5+6+7=18 3。按照自加运算符优先,7+7+7=21 当然这种问题在c++程序中要尽量避免,处理不当会造成很严重的后果 然后再说说你的这个问题 又如int x(6); (++x)+(++x),就属于自加运算符优先,8+8=16...
C++窗体渐变背景的实现方法
这种奇特的视觉效果制作起来相当简单,只需将屏幕分成许多行,每一行显示不同的颜色就可以了。渐变图形可以有许多种形式,有圆形渐变、矩形渐变、对角渐变等多种显示效果。要显示渐变,需使用到RGB 宏,每次使颜色值的各颜色分量稍有变化。 A:实现与应用 选择菜单 File | New Application,创建一个新的项目文件。在窗体 Form1 上放置一个 TColorDialog 控件,然后切换到Unit1.h,在 TForm1 的 private 部分加入两个变量的定义,分别用于设置起始颜色和终止颜色。...
对C++中常用的排序法的研究和分析
首先介绍一个计算时间差的函数,它在time.h头文件中定义,于是我们只需这样定义2个变量,再相减就可以计算时间差了。 函数开头加上 clock_t start = clock(); 函数结尾加上 clock_t end = clock(); 于是时间差为: end - start 不过这不精确的 多次运行时间是不同的 和CPU 进程有关吧 (先总结一下:以下算法以时间和空间以及编码难度,以及实用性方面来看,快速排序法是最优秀的!推荐!但是希尔排序又是最经典的一个,所以建议优先看这2个排序算法) 排序算法...
C++数值--字符串间转换方法总结
C/C++中相关的转换方法主要有如下几种: (一)、使用CRT库中的转换函数族。 _itoa, _itow 及其反转换 atoi, _wtoi _ltoa, _ltow 及其反转换 atol, _wtol _ultoa, _ultow _ecvt, _fcvt, _gcvt 及其反转换 _atodbl, _atoldbl,_atoflt ...(太多了,不想写了) 使用此方法的优点:是C标准库中函数,现成可用且可移植(部分为平台相关)。 缺点:转换函数较多,命名不统一以致难以记住,使用不方便。 (二)、借...
C++多态技术的实现和反思
面向对象技术最早出现于1960年代的Simula 67系统,并且在1970年代保罗阿托实验室开发的Smalltalk系统中发展成熟。然而对于大部分程序员来说,C++是第一个可用的面向对象程序设计语言。因此,我们关于面向对象的很多概念和思想直接来自于C++。但是,C++在实现面向对象中关键的多态性时,选择了与Smalltalk完全不同的方案。其结果是,尽管在表面上两者都实现了相似的多态性,但是在实践中却有着巨大的区别。具体的说,C++的多态性实现更加高效,但是并不适用于所有场合。很多经验不足的C++开发者...
C++开源程序库评话
C语言天生就与开放结缘。C最初是作为UNIX的系统编程语言而流行起来的,而UNIX可以被认为是第一个产生重大影响的“开源”软件。随着UNIX的流行,C语言逐渐被人们认识和喜爱。很快的,在各个平台上C语言都成为了流行的甚至是统治性的程序设计语言。 大约到1980年代中期,C已经成为人类历史上第一种工业级程序设计世界语。很多人都知道,正是C这样一种世界语的出现,才使开源运动的出现和最初发展成为可能,从这个意义上讲,说C语言是开源运动之母并不十分过分。但人们不太能够认识到的是,事实上C语言统治地位的获得,却也...
C++中结构体的慨念和使用方法
什么是结构体? 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。 定义结构体使用strUCt修饰符,例如: C++ 代码 struct te...
对C/C++可变参数表的深层探索
引言 C/C++语言有一个不同于其它语言的特性,即其支持可变参数,典型的函数如printf、scanf等可以接受数量不定的参数。如: printf ( "I love you" ); printf ( "%d", a ); printf ( "%d,%d", a, b ); 第一、二、三个printf分别接受1、2、3个参数,让我们看看printf函数的原型: int printf ( const char *format, ... ); 从函数原型可以看出,其除了接收一个固定的参数format以外,后...
C++实例教学之类的应用
类class)的概念是面向对象程序设计的核心概念。把对数据和数据的操作和处理封装在一个程序模块中的方法,可以说是人们经过几十年程序设计 实践的经验总结。把程序以类的形式组织成若干模块,使其获得了最佳的结构特性。类概念的引入使程序设计发生了革命性的转变。从结构程序设计(SP)中以作为程序的基本模块转变为面向对象(OOP)程序设计中,以类作为程序的基本模块,这一变化使程序设计技术出现了质的飞跃。 类的概念抓住了程序的本质。程序的基本元素是数据。而函数是围绕数据进行处理和操作。抓住了数据这个“纲”,程序中关系复...