C/C++
文章平均质量分 67
Bruce_Zeng
这个作者很懒,什么都没留下…
展开
-
浅析C++标准头文件结构
在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。预处理指令是以#号开头的代码行。转载 2011-11-27 19:02:41 · 711 阅读 · 0 评论 -
表达式求值(简易版)
昨天在复习数据结构之栈的时候,就想起自己以前帮同学做过一个表达式求值的,但现在想想基本忘光了,所以重新写过一个。现在这个版本的实现了基本四则运算以及带括号的运算,并且支持括号的嵌套,如 5+((1+2)*3)+((1+2)*(2+3))这样的表达式。也支持输入的数字是多位的,而不仅仅是个位数的运算,如 56+21这样的表达式。当然,因为这只是个初级版本,目前只支持整数的运算,而且当做除原创 2012-07-18 21:12:19 · 1327 阅读 · 0 评论 -
指针学习系列(一):关于指针
指针是一个无符号整数,它是一个以当前系统寻址范围为取值范围的整数。也就是说指针本身的值表示一个地址。我们先来看看指针的表示方法,对于类型T,T*是“到T的指针”类型,也就是说,一个类型T*的变量能保存一个类型T的对象的地址。例如char c = 'a';char* p = &c;//p保存着c的地址当我们要通过指针访问其指向地址的值时,可以用间接运算符*来完成,就拿上面原创 2012-10-26 13:47:16 · 795 阅读 · 0 评论 -
c++中的 mutable 关键字
我们在学习C++类的时候,经常会看到这样的成员函数 void function_name(...)const;相比普通的成员函数,其最后加了个 const,像这种在函数声明的参数表后面出现的const的成员函数我们称之为“常量成员函数”,它指明这些函数不会修改对象的状态。很显然,编译器将能捕捉到无意中违背这种承诺的任何企图。例如我们定义这样一个类:class A{ int x;原创 2012-11-09 14:12:23 · 3914 阅读 · 1 评论 -
C++类的静态成员(static)
类的静态成员主要是用来解决资源共享的问题。但其使用起来还是比较蛋疼的,很容易搞混,所以在这写下来当做以后复习用。类的静态成员包括静态数据成员和静态函数成员。一.静态数据成员:类中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具原创 2012-11-12 12:58:09 · 1342 阅读 · 1 评论 -
典型的 C++ 程序员成长经历
1. 完整的学一遍 C++ 所有语言特性,典型书籍 "The C++ Programming Language" Part1, Part2, "C++ Primer" 感觉 C++ 像大杂烩(多编程范型),各种精妙的语法特性 (friend, virtual/RTTI, const/mutable, exception, template),太多精妙的东西容易导致记忆琐碎化,学转载 2012-11-16 21:48:33 · 3472 阅读 · 0 评论 -
指针学习系列(二):const 与 指针
const 与指针变量的结合主要有3种情况:常量指针、指针常量及两者的结合。常量指针:指向常量的指针,顾名思义,就是指针指向的变量是一个常量,也就是指针指向的地址中的内容不能修改。当然这样的指针也是可以指向变量的,而且很多时候我们都是这么做的。在类中,尤其是对一个对象进行读操作时,一般我们都希望不改变它的值,但我们有时却还需要通过别的函数对这个对象进行写原创 2012-12-06 15:45:09 · 833 阅读 · 0 评论 -
C_贪吃蛇
#include#include#include#includestruct COOR{ int x; int y;};struct SNAKE{ int length;//蛇长 COOR body[500];//蛇的身体 char dir;//蛇的方向 上72 左75 右77 下80};HA原创 2012-04-18 12:40:23 · 1131 阅读 · 0 评论 -
C++类的内联成员函数应放在哪
今天复习C++ Primer的时候,看到了关于C++类的内联成员函数的放置,应该放在头文件中。那么这到底是为什么呢?仅仅是一种代码规范问题还是必须这样做呢?下面我就来讲讲我自己的理解吧。要彻底理解这个问题,首先就要了解下函数的声明和定义了。我们知道,函数可以在多处声明,但只能在一个地方定义,不然就会出现重定义。大部分函数默认是外部链接,而inline函数默认为内部链接。也就是说in原创 2013-03-13 09:38:06 · 9566 阅读 · 4 评论 -
构造函数注意事项总结
这个是本人自己复习C++ Primer时根据书上的讲解以及课后习题总结的关于构造函数使用的一些注意事项。本人能力有限,总结不全处还望大家多多指正。构造函数注意事项总结:1、构造函数初始化列表中初始化成员和构造函数函数体中对成员赋值的区别:使用构造函数初始化列表的版本初始 化数据成员,没有定义初始化列表的构造函数版本在构造函数函数体中对数据成员赋值。2、没原创 2013-03-13 15:35:43 · 2144 阅读 · 0 评论 -
Opencv2.2版本以上CvvImage类的使用
前段时间一直在学习opencv,但学习过程中写的例子都是基于控制台的。今天打算把之前写的一些例子都移植到MFC中,基本上就是复制以前的代码,唯一的区别在于在控制台中,显示图像是先创建一个窗口,然后在窗口中显示图像,然而在MFC中,一般是将图像显示在一个picture控件中,这样就得用到CvvImage类啦,但是这里有一个问题,那就是Opencv2.2以上版本不再原创 2012-10-08 17:22:00 · 7792 阅读 · 6 评论 -
对堆栈的一点认识
/*头文件stack.h*/#ifndef STACK_H_#define STACK_H_typedef unsigned long Item;class Stack{public:Stack();bool isempty()const;bool isfull()const;bool push(const Item & item);bool pop(I原创 2011-11-27 19:04:59 · 1289 阅读 · 1 评论 -
C++从子类访问父类的私有函数
C++:从子类访问父类的私有函数转自 龙音阁http://blog.sina.com.cn/dragonsound 感谢原作者的工作(2009-09-01 22:44:21)标签: 虚函数 c private f1 it 众所周知,c和c++的数组都是不安全的,因为无论c还是c++都不提供数组边界检查功能,这使得数组溢出成为可能。从某个意义上说,c和c++是一种缺少转载 2012-08-01 20:51:29 · 11811 阅读 · 0 评论 -
kmp模板
关于KMP算法的思想,网上有很多,这个算法写起来简单,但理解起来还是有一定难度的,我的表达能力也说不清楚,所有直接上我自己写的模板吧#include#includeusing namespace std;void get_next(char* p, int* next){ int i, j; i = 0; j = -1; next[0] = -1; while原创 2012-07-19 22:16:11 · 3024 阅读 · 0 评论 -
互斥对象
互斥对象属于内核对象,它能够确保线程拥有对单个资源的互斥访问权。互斥对象包含一个使用数量,一个线程ID,一个计数器。其中ID用于标示系统中的哪个线程当前拥有互斥对象,计数器用于指明该线程拥有互斥对象的次数。先讲讲互斥对象的创建,需要调用函数 CreateMutex,改函数原型如下:HANDLE CreateMutex( LPSECURITY_ATTRIBUTES原创 2012-08-16 13:16:29 · 3689 阅读 · 0 评论 -
二分查找
二分查找又称折半查找。使用二分查找的前提:线性表中的记录必须是关键码有序,线性表必须采用顺序存储。二分查找的思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功; 若给定的值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定的值大于中间原创 2012-08-01 15:01:42 · 1351 阅读 · 0 评论 -
在VS2010中开发ActiveX控件设置测试容器的方式
在VS2010中开发ActiveX控件设置测试容器的方式借鉴文章http://blog.csdn.net/waxgourd0/article/details/7374669 在VS2010中开发MFC ActiveX控件,开发完后,通常使用VS自带的容器ActiveX Control Test Container来运行ActiveX控件。此容器在VS安装后的文件中是找转载 2012-08-21 14:43:02 · 7293 阅读 · 6 评论 -
MFC树形控件(CTreeCtrl)用法(上)
树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些树形控件的转载 2012-10-07 20:43:42 · 8068 阅读 · 0 评论 -
MFC树形控件(CTreeCtrl)用法(下)
前面一节讲了树形控件Tree Control的简介、通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建、CTreeCtrl类的主要成员函数和应用实例。 树形控件的创建 MFC为树形控件提供了CTreeCtrl类,它封装了树形控件的所有操作。 树形控件的创建也是有两种方式,一种是在对话框模板中直接拖入Tree Contro转载 2012-10-07 20:45:25 · 60738 阅读 · 8 评论 -
SimpleFactory模式
在面向对象系统设计中经常可以遇到以下的两类问题:1、为了提高内聚和降低耦合,我们经常会抽象出一些类的公共接口以形成抽象基类或接口。这样我们可以通过声明 一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题就是n多的子类继承 自抽象基类,我们不得不在每次要用到的子类的地方就编写诸如new xxx;这样的代码。这里带来两个问题:原创 2013-05-17 17:16:14 · 1651 阅读 · 2 评论