C/C++/C#
文章平均质量分 73
灵魂
幸福就是:有事做、有人爱、有所期待;迷茫就是:追悔过去、踌躇未来、蹉跎当前。
展开
-
Explicit 关键字
说实话,从来没有感觉到这个关键字有用,直到今天。explicit的意思是明显的,和它相对应的一个词是implicit意思是隐藏的。我参考了MSDN和《c++标准程序库》对这个关键字的描述,并参考了网络上对这个关键字的解释。现将它的使用方法和总结记录如下:首先这个关键字只能用在类构造函数。它的作用是不能进行隐式转换。class gxgExplicit //没有关键字explic原创 2009-03-31 19:21:00 · 11000 阅读 · 7 评论 -
boost的类型转换
原来我总结过c++的一些类型转换函数:http://blog.csdn.net/callmeback/article/details/4040583static_cast, dynamic_cast, const_cast, reinterpret_cast其中各有各的用处和弊端。boost的Conversion库分别实现了四个类型转换函数:polymorphic_case, polymo原创 2012-07-12 16:24:41 · 5923 阅读 · 0 评论 -
基于对话框的单实例应用程序
介绍 有许许多多的文章介绍单示例应用程序的实现,这里演示一种非常简单的基于MFC对话框的应用程序,本技术可以运用到ATL/WTL和普通的win32应用程序。实现创建一个基于对话框的MFC工程。打开资源文件(.rc),找到主窗口的模板,并添加一句话。把这个窗口类注册为SINGLE_INSTANCE_APP。IDD_SINGLEINSTANCE_DIALOG DIALOGEX翻译 2012-09-06 09:59:14 · 1227 阅读 · 0 评论 -
变态的C声明怎么识别?
做C语言程序经常会遇到变态的声明,学习了msdn上的一篇文章,豁然开朗。char *( *(*var)() )[10]; ^ ^ ^ ^ ^ ^ ^ 7 6 4 2 1 3 51. var被定义为2. 一个指向3的指针3. 一个返回值为4的函数4. 一个指向5的指针5. 一个拥有10个变量的一维数组,它66. 指向77. ch原创 2012-09-26 17:33:13 · 1339 阅读 · 1 评论 -
IEnumerable和IEnumrator用法
先用一个修改过的代码来演示用法,只来干的,不来稀的。/* * Created by SharpDevelop. * User: Owner * Date: 2012-12-14 * Time: 13:43 * * To change this template use Tools | Options | Coding | Edit Standard Headers.原创 2012-12-14 15:35:35 · 8174 阅读 · 0 评论 -
ISerializable用法(初级)
家里只有一台电脑,影响老婆看电视剧了。赶紧拷贝完,洗袜子去...不解释,看注释。/* * Created by SharpDevelop. * User: iwateru * Date: 2012/12/15 * Time: 18:52 * * To change this template use Tools | Options | Coding | Edit Standa原创 2012-12-15 21:09:09 · 7342 阅读 · 3 评论 -
设计模式——简单工厂
工厂模式是创建型模式。简单工厂是最简单的模式,主要是静态创建类型,代码如下: #region 简单工厂 public abstract class 产品 { public abstract string 展示(); } public class 产品一 : 产品 { public override string 展示() { return "型号:产品一。";原创 2013-01-03 22:14:03 · 1379 阅读 · 0 评论 -
Enum和单选框关联
有了enum我们可以列举类型了,有了单选框和复选框我们可以鼠标来选择了。但是编程的时候觉得让两个关联起来,写代码比较麻烦,所以想自动的关联起来。所以我尝试了一下,记录如下。假如一个星期的enum: public enum 星期 { 星期一 = 0, 星期二, 星期三, 星期四, 星期五原创 2013-01-03 22:08:05 · 1660 阅读 · 0 评论 -
C#事件的实现
事件是C#中一个重要的内容,MSDN上有一个自定义事件的演示示例。我看了半天有点晕,所以新建了一个winform工程添加了一个按钮,然后找出调用的程序,一对比做了一个类似的示例,就明白了。看代码有时候比看文档来得更快。所以还是一贯的原则,来干的,不来稀的。 using System;namespace TestEventArgs{ /// /// 这个类对应于Ev原创 2012-12-19 11:25:11 · 3827 阅读 · 0 评论 -
c#制作简单启动画面
声明:代码照搬自SharpDevelop源码。 启动画面是程序启动加载组件时一个让用户稍微耐心等待的提示框。一个好的软件在有启动等待需求时必定做一个启动画面。启动画面可以让用户有心理准备来接受程序加载的缓慢,还可以让用户知道加载的进度和内容。本文只是记录最简单的构架。VS2010创建一个C# Windows窗体应用程序,将主窗体改名为FormMain,再创建一个窗体起名为SplashS原创 2013-03-29 11:26:28 · 16974 阅读 · 4 评论 -
优先级反转和解决方法
优先级反转的描述:假设任务1,任务2,任务3;他们的优先级顺序分别为1 > 2 > 3。有一个稀缺资源S,S由一个信号量控制为互斥访问。任务3正在执行,并申请到了资源S;任务1抢占了任务3的执行,任务3挂起,任务1执行;任务1申请资源S,发现被占用,所以挂起,任务3恢复执行;任务2抢占了任务3的执行,任务3挂起,任务2执行;任务2执行完毕,任务3恢复;任务3释放资源S,任务1抢占资源S原创 2013-10-15 11:26:09 · 14226 阅读 · 3 评论 -
可重入函数
可重入性函数是指:可以在多任务,多线程,并发等情况下访问不出错的函数。在嵌入式、多线程、多进程和并发执行的程序中,多个目标同时调用一个函数而不会出现数据错误,需要函数具备以下特点:不调用系统函数和不可重入性函数。在嵌入式中,不要使用系统自带的string和标准IO函数,需要自己实现,在其他开发中不调用非线程安全的函数。不调用静态数据,或者对静态数据加互斥操作。嵌入式中可以关中断,互斥信原创 2013-10-18 15:49:14 · 1726 阅读 · 0 评论 -
Logger类
找到了一个LOGGER类,但是输出中文有点毛病,就修改了一下贴出来。把指针替换为智能指针,解决显式释放的问题。原创 2015-09-09 16:25:39 · 5416 阅读 · 1 评论 -
CStringA,CStringW和CString之间的转换
现实中用到CStringA和CStringW的转换,就封装了一下。#pragma onceclass CStringToolExt{public: CStringToolExt(); ~CStringToolExt();public: static CStringA CStrT2CStrA(const CString &cstrSrc); static CStringW CSt原创 2015-11-05 14:27:38 · 6744 阅读 · 0 评论 -
MFC程序中Debug模式下调试信息输出到控制台
有时候我们会想看到调试信息,但是在正式发布程序中又不想看到。下面的方式就是在MFC中Debug模式输出调试信息到控制台,在Release模式下没有输出。#ifdef _DEBUG#include #endif在InitInstance()函数如下#ifdef _DEBUG AllocConsole();#endif在ExitInstance()函数如下原创 2015-11-24 11:29:55 · 3848 阅读 · 0 评论 -
数字签名是什么?
What is a Digital Signature?转载 2015-12-09 14:39:05 · 729 阅读 · 0 评论 -
智能指针weak_ptr
智能指针weak_ptr主要用来协助shared_ptr。不参与引用计数,但是有以下好处:1 打破递归的依赖关系2 使用一个共享的资源但是不要所有权,不添加引用计数3 避免悬空指针。使用方法有二:// 方法一boost::shared_ptr sp(new std::string("method1");// 从shared_ptr构建出来boost::weak_pt原创 2012-07-12 11:04:32 · 927 阅读 · 0 评论 -
代码注释法学习智能指针intrusive_ptr
智能指针intrusive_ptr一般情况下不要使用,除非被指类的某个成员函数需要返回this指针。因为intrusive_ptr需要自己实现引用计数,所以实现起来比较复杂。还要实现intrusive_ptr_add_ref和intrusive_ptr_release两个函数。参考《Beyond the C++ Standard Library: An Introduction to Bo原创 2012-07-09 15:36:26 · 3589 阅读 · 1 评论 -
智能指针shared_ptr
boost库的第二类智能指针是shared_ptr。shared_ptr的特点是:一、 它可以指向相同的内容,靠引用计数来决定内容是否释放。其中new int申请的空间,在三个指向它的指针全部释放时才被释放,否则只是引用计数减一。#include #include int _tmain(int argc, _TCHAR* argv[]){ boost::shared_ptr原创 2012-07-08 12:39:20 · 2846 阅读 · 2 评论 -
类型转换操作符:static_cast, dynamic_cast, const_cast, reinterpret_cast.
呵呵,今天来好好看看着几个转换操作符的用法。以前老是看着眼熟,但是用着手生。今天决定搞定这些个东西。在C语言中类型转换有几种方式:1. (expression). 在表达式外边加括号,由编译器来决定怎么改变。2. new_type(expression). 强制类型括号住表达式。3. (new_type)expression. 括号住强制类型。4.原创 2009-04-01 11:26:00 · 5235 阅读 · 2 评论 -
Namespace:命名空间
Namespace:命名空间。命名空间是用来解决不同的类和函数拥有相同的名称的问题。解决了命名冲突的问题。namespace gxg{ class A; void BFunction();} namespace gaoxiaoguang{ class A; void BFunction();} 使用方法:gxg::A gx原创 2009-03-31 14:55:00 · 1029 阅读 · 0 评论 -
C字符串操作函数实现
下面是部分C字符串操作函数的实现,或许在某些笔试时可以用到!#ifndef NULL#define NULL ((void *)0)#endif/* memcpy的实现代码*/void* memcpy(void *pDst, void *pSrc, int iLen){ char *pTmp = (char *)pDst; char *pTmp2 =原创 2009-04-24 15:43:00 · 1792 阅读 · 0 评论 -
异常--提醒自己
今天写一个程序突然发现一个问题,我抛出的异常没有被截获直接内存泄露死掉了。找了半天发现问题的所在。记下来,提醒自己。 try{ … throw std:: out_of_range(“出界了”); …}catch(std::exception const& ex){ std::cerr ret原创 2009-04-28 11:25:00 · 1158 阅读 · 3 评论 -
C++中获得当前系统时间
// 方案— 优点:仅使用C标准库;缺点:只能精确到秒级#include #include int main( void ) { time_t t = time( 0 ); char tmp[64]; strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) ); put转载 2009-10-25 10:15:00 · 1549 阅读 · 0 评论 -
设置漂亮的工具条(代码是拷贝来的,但是经过试验)
默认的VC单文档或者多文档的工具条是一个个的图标,下面这段代码可以让你得到一个上边是图标下边是文字的工具条。代码: if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY原创 2010-03-20 22:55:00 · 1465 阅读 · 0 评论 -
匈牙利命名规则
变量命名规则------匈牙利命名规则!几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符转载 2010-04-07 17:22:00 · 1051 阅读 · 0 评论 -
vc2005设置XP风格界面
在VC2005中创建一个MFC工程,然后选择对话框界面,其中有个选择是否是Unicode,当选择Unicode的时候和不选择Unicode的时候,对话框中的按钮显示效果差异很大,选择Unicode的是好看的效果,没有选择的是老式的效果。为了不选Unicode而使用好看的效果,原创 2011-08-08 15:55:11 · 1368 阅读 · 1 评论 -
FatFs模块程序移植手册(未完待续)
FatFs模块程序移植手册1. 如何移植?基本情况FatFs模块假设有以下的移植条件l ANSI CFatFs模块是用ANSI C(89)书写的中间件。它不依赖于任何平台,只要编译器符合ANSI C就可以。l Interger类型的大小FatFs模块假设char/short/long类型的大小分别是8/16/32位并且int是16位或者32位。这些内翻译 2011-11-18 17:01:25 · 7921 阅读 · 0 评论 -
lwip双网卡移植的问题,以及特殊解决方法。
我公司产品是双网口,原来的程序是自己写的TCP/IP协议栈,因为只是简单实现了ARP和TCP、UDP的最简单情况,所以有时候在公网上会遇到问题。后来在单网口的产品中移植了LWIP,轻量级TCP/IP协议栈,觉得一定程度上解决了问题,所以双网卡的产品也要用LWIP这个协议栈来实现。这个工作就落到了我的头上。单网卡的移植我不赘述,只描述从单网卡向双网卡移植过程中遇到的问题以及解决方法。首先原创 2011-10-31 15:00:14 · 7499 阅读 · 5 评论 -
C语言一句话知识
1. class和struct的区别class和struct的用法没什么区别,只是class默认的成员变量是private,而struct默认是public。2. printf打印一个string时不要忘记使用%s看代码便知:int main(){ char string[] = “Hello c programmers %dd”; pr翻译 2012-04-25 15:32:30 · 2088 阅读 · 0 评论 -
vs2010配置boost编程环境(照抄并简化)
第一步:下载boost,我下载的方法是从http://www.boost.org/上找最新的下载。名字叫boost_1_50_0.7z。第二步:在D盘(我C盘空间不大,准备出至少10G的空间吧)创建一个目录boost,拷贝进去并解压到当前文件夹。第三步:开始->程序->Microsoft Visual Studio 2010->Visual Studio Tools->Visual Stu原创 2012-07-04 15:21:31 · 4260 阅读 · 0 评论 -
智能指针scoped_ptr
scoped_ptr特点:1 用法绝大多数情况下和auto_ptr相同。2 不支持自增,自减操作。3 不能被赋值或者复制构造。4 由于3的原因不能作为容器的元素,这也是优于auto_ptr的原因。scoped_ptr使用场景:1 在有可能抛出异常的作用域中使用时,减少有可能资源释放不正确导致的错误。2 函数中控制路径多并且复杂时,减少代码的逻辑阅读难度和资源释放有可能带原创 2012-07-05 13:21:09 · 1543 阅读 · 0 评论 -
简单好玩的C++关键字mutable
mutable是一个好玩的C++关键字,也是我第一次遇到。于是查了查msdn,结果发现果然是好玩的关键字。首先,它只能修饰非const,非static的类数据成员。其次,它用来突破const函数。再次,它就这么一个功能。class X{public: // 在逻辑上GetFlag只是获取我的m_flag状态,所以修饰为const // 但是,我需要知道其中一些动态的原创 2012-07-09 10:16:15 · 1126 阅读 · 0 评论 -
享元模式
享元模式的示例。原创 2016-04-06 23:11:42 · 1369 阅读 · 0 评论