![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C vs C++
文章平均质量分 67
快乐的霖霖
一个人默默的奋斗者
展开
-
windows编程中wParam和lParam消息
windows编程中wParam和lParam消息 1.WM_PAINT消息,LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高。 2 滚动条WM_VSCROLL或WM_HSCROLL消息,LOWORD(wParam)指出了鼠标对滚动条的操作。比如上、下、左、右、翻页、移动等。 3 击键消息,有WM_SYSKEYDOWN、WM_SYSKEYU原创 2012-02-12 10:25:08 · 2380 阅读 · 0 评论 -
Win32的基本概念和c++的重要性质
Win32的基本概念和c++的重要性质(简介)1. 在MFC程序中,如果想要修改应用程序窗口的图标,则应在框架类中进行,因为在框架窗口中才有标题栏,所以才能修改位于该标题栏上的图标;如果想要修改程序窗口的背景和光标,则应该在视类中进行。2. 为什么Windows Programming Modal要把窗口函数设计为一个call back函数?为什么不让程序在抓到消息(GetMe原创 2012-02-13 22:14:48 · 1115 阅读 · 0 评论 -
c++拷贝构造函数简介
c++拷贝构造函数简介 拷贝(复制)构造函数、赋值操作符和析构函数总称为复制控制。编译器自动实现这些操作,但类也可以定义自己的版本。编译器自动合成的仅为满足编译器的要求而不是满足用户的要求!一、拷贝构造函数可用于:*根据另一个类型的对象显式或者隐式初始化一个对象。*复制一个对象,将它作为实参传给一个函数。*从函数返回时复制一个对象。*初始化顺序容器中的元素。vect原创 2012-02-24 09:35:34 · 790 阅读 · 0 评论 -
MFC程序的诞生与死亡
MFC程序的诞生与死亡程序的诞生:① Application object产生,内存于是获得配置,初值亦设立了。② Afx WinMain执行AfxWinInit,后者又调用AfxInitThread,把消息队列尽量加大到96.③ AfxWinMain执行InitApplication。这是CWinApp的虚拟函数,通常我们不改写它。④ AfxWinMain执行InitInst原创 2012-02-17 16:35:12 · 1675 阅读 · 0 评论 -
cin.get()与cin.getline()的区别
cin.get()与cin.getline()的区别cin.getline()和cin.get()都是对输入的面向行的读取,即一次读取整行而不是单个数字或字符,但是二者有一定的区别。cin.get()每次读取一整行并把由Enter键生成的换行符留在输入队列中,比如:#include using std::cin;using std::cout;const int SIZ原创 2012-03-17 10:05:51 · 824 阅读 · 0 评论 -
Explicit 关键字简介
Explicit 关键字简介 explicit关键字用来修饰类的构造函数,表明构造函数是显示的,相对的是implicit关键字。 首先这个关键字只能用在类内部的构造函数声明上,而不能用在类外部的函数定义上,它的作用是不能进行隐式转换。 class gxgExplicit //没有关键字explicit的类 { public:原创 2012-04-09 19:36:58 · 1045 阅读 · 0 评论 -
STL源码分析之Vector
STL源码分析之Vector地球人都知道vector的查找效率很高, 插入和删除的效率低下, 容器会随着元素的不断增加自动增长, 最近在看了STL源码之后, 发现确实是这样, 下面是vector一些关键的函数. 从这些函数可以看出插入和删除的过程, 以及容器自动增长的方式. // 两个通过下标获取元素的函数.reference operator[](size_type __n)转载 2012-05-13 19:52:45 · 1198 阅读 · 0 评论 -
STL中list链表的sort算法详解
STL中list链表的sort算法详解 今天在学习侯捷先生的《STL源码剖析》这本书,在讲到list链表中的sort算法时,书上写的不详细,很难在短时间内搞明白,我也花了好长时间才搞懂这个算法,下面我就来讲一讲这个算法的实现细节。 附代码如下: template void list::sort(){ if(node->next原创 2012-05-15 21:09:43 · 2242 阅读 · 3 评论 -
30分钟掌握STL系列(一)
30分钟掌握STL系列(一)STL概述 STL的一个重要的特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。 要点 STL算法作为模板函数提供。为了和其他组件相区别,在本书中STL算法以原创 2012-05-19 16:57:31 · 935 阅读 · 0 评论 -
30分钟掌握STL系列(二)
30分钟掌握STL系列(二)迭代器 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。 迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个STL容器类可能为了使用一个原创 2012-05-19 17:20:57 · 762 阅读 · 0 评论 -
30分钟掌握STL系列(三)
30分钟掌握STL系列(三)使用迭代器编程下面就讲一讲几种类型迭代器的编程。输入迭代器输入迭代器是最普通的类型。输入迭代器至少能够使用==和!=等。使用*来访问数据;使用++操作来递进迭代器到下一个元素或到达past-the-end值。为了理解迭代器和STL函数是如何使用它们的,现在来看一下find()模板函数的定义: template InputIterator原创 2012-05-20 09:32:53 · 842 阅读 · 0 评论 -
30分钟掌握STL系列(四)
30分钟掌握STL系列(四)这一节中学习相关的STL技术。流和迭代器本书的很多例子程序使用I/O流语句来读写数据。例如:int value;cout cin >> value;cout 对于迭代器,有另一种方法使用流和标准函数。理解的要点是将输入/输出流作为容器看待。因此,任何接受迭代器参数的算法都可以和流一起工作。 #i nclude #i ncl原创 2012-05-20 10:18:58 · 986 阅读 · 0 评论 -
30分钟掌握STL系列(五)
30分钟掌握STL系列(五)这一节讲一讲STL中的函数与函数对象。STL中,函数被称为算法,也就是说它们和标准C库函数相比,它们更为通用。STL算法通过重载operator()函数实现为模板类或模板函数。这些类用于创建函数对象,对容器中的数据进行各种各样的操作。下面的几节解释如何使用函数和函数对象。函数和断言经常需要对容器中的数据进行用户自定义的操作。例如,你可能希望遍原创 2012-05-20 10:45:48 · 863 阅读 · 0 评论 -
eclipse下JNI的初步实现
eclipse下JNI的初步实现 JNI=java native interface, 为java应用程序提供调用本地方法的接口 The standard Java class library may not support the platform-dependent features needed by your application. You may原创 2012-07-06 20:41:59 · 1024 阅读 · 0 评论 -
跨语言之间的socket通信(C--Java的握手)
跨语言之间的socket通信(C--Java的握手) 作者: xuanner 发布日期: 2008-1-7 17:15:01 Email:chenxuan5627@163.com----------------------------------(原创作品,请保留作者著作信息)--------------------------------------------转载 2012-07-17 14:15:14 · 2232 阅读 · 0 评论 -
C语言文件操作之----文件的读写
C语言文件操作之----文件的读写 当文件按指定的工作方式打开以后,就可以执行对文件的读和写。下面按文件的性质分类进行操作。针对文本文件和二进制文件的不同性质,对文本文件来说,可按字符读写或按字符串读写;对二进制文件来说,可进行成块的读写或格式化的读写。1. 读写字符 C提供fgetc和fputc函数对文本文件进行字符的读写,其函数的原型存于stdio.h头文件中,格式为:原创 2012-09-01 21:24:30 · 1457 阅读 · 0 评论 -
如何在C语言中调用shell命令
如何在C语言中调用shell命令 在linux操作系统中,很多shell命令使用起来非常简单,这些shell命令的程序实现已经被底层实现好。有时候需要在程序中调用shell命令,这样可以就不用在控制台上手动输入shell命令了,下面就以三个函数为例来讲解如何在C语言中调用shell命令。1、system(执行shell 命令)相关函数 fork,execve,w原创 2012-09-06 16:50:46 · 2950 阅读 · 0 评论 -
error C2065: '_beginthreadex' : undeclared identifier 的解决办法
error C2065: '_beginthreadex' : undeclared identifier 的解决办法 在VC下编译多线程程序时,经常加入了头文件#include,编译时还是出现error C2065: '_beginthreadex' : undeclared identifier 的问题,原因是VC打开时编译程序时,工程中设置的单线程,所以要更改工程中的设置。原创 2012-09-12 16:31:13 · 7092 阅读 · 0 评论 -
C/C++宏定义的可变参数
C/C++宏定义的可变参数编写代码的过程中,经常会输出一些调试信息到屏幕上,一般会调用printf这类的函数。但是当调试解决之后,我们需要手工将这些地方删除或者注释掉。最近在看《Linux C编程一站式学习》这本书,就想到一个方法:void myprintf(char* fmt, ...){}#ifdef DEBUG#define printf(fm原创 2012-10-02 10:47:07 · 4496 阅读 · 0 评论 -
内联函数inline和宏定义
内联函数inline和宏定义内联函数的优越性:一:inline定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换(像宏定义一样展开),没有了调用的开销,效率很高。二:类的内敛函数是一个真正的函数。三:使用内联函数inline可以完全取代表达式形式的宏定义。 例子:Class A{public:原创 2012-10-02 10:10:53 · 1770 阅读 · 0 评论 -
c++ new的三种用法
c++ new的三种用法一. 简介new有三种使用方式:plain new,nothrow new和placement new。(1)plain new顾名思义就是普通的new,就是我们惯常使用的new。在C++中是这样定义的: void* operator new(std::size_t) throw(std::bad_alloc); void o原创 2012-09-23 21:01:21 · 1670 阅读 · 0 评论 -
如何通过C语言自动生成MAC地址
如何通过C语言自动生成MAC地址 最近在做虚拟机项目时,需要给创建的每一个虚拟机自动生成一个MAC地址,由于MAC地址为48位,而且格式是以:隔开的,所以下面我写了一个c程序,来自动生成MAC地址。 // MAC.c#include#include#include#include#define RANDOM(x) (rand()%x)原创 2012-09-24 14:29:00 · 5355 阅读 · 0 评论 -
ebp与esp讲解
一.概念分析经常看到下面这两句:pushl %ebp movl %esp,%ebp -------------------------------------------------------------------------------- esp是堆栈指针 ebp是基址指针 那两条指令的意思是 将栈顶指向 ebp 的地址 ----原创 2012-11-04 12:58:00 · 5830 阅读 · 0 评论 -
汇编语言rep movsd
汇编语言rep movsdrep movsd 一般为:mov esi,offset @s1 mov edi,offset @s2mov ecx,数cldrep movsd 查找了几个资料,都说得不怎么完整,也许是我知道的太少了,所以觉得不完整,呵呵 1.rep 为重复指令 每次ecx!=0便执行movsd ,然后ecx=ecx-1 movsd移动原创 2012-11-10 10:32:12 · 1980 阅读 · 0 评论 -
程序员面试题精选100题(30)-赋值运算符重载函数[C/C++/C#]
程序员面试题精选100题(30)-赋值运算符重载函数[C/C++/C#] 问题:给出如下CMyString的声明,要求为该类型添加赋值运算符函数。class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~原创 2012-11-25 20:08:37 · 1341 阅读 · 0 评论 -
dword ptr指令讲解
dword ptr指令讲解8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。对于这个问题,汇编语言中用一下方法处理。(1)通过寄存器名指明要处理的数据的尺寸。例如:下面的指令中,寄存器指明了指令进行的是字操作:mov ax,1mov bx,ds:[0]mov原创 2012-11-12 08:45:02 · 3011 阅读 · 0 评论 -
程序员面试题精选100题(15)-含有指针成员的类的拷贝
程序员面试题精选100题(15)-含有指针成员的类的拷贝参考来源: 1. http://zhedahht.blog.163.com/blog/static/25411174200722710364233/ 2. >题目:下面是一个数组类的声明与实现。请分析这个类有什么问题,并针对存在的问题提出几原创 2012-11-19 23:27:33 · 695 阅读 · 0 评论 -
C语言中setjmp和longjmp函数
C语言中setjmp和longjmp函数setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理。先来看一下这两个函数的定义吧:setjmp和longjmp的函数原型在setjmp.h中函数原型:int setjmp(jmp_buf原创 2012-12-05 15:07:01 · 764 阅读 · 0 评论 -
va_list(),va_start(),va_arg(),va_end()
va_list(),va_start(),va_arg(),va_end()详解(一)写一个简单的可变参数的C函数下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的C函数要在程序中用到以下这些宏:void va_start( va_list arg_ptr, prev_param );type va_arg( va_list arg_ptr, type )原创 2012-10-19 15:57:34 · 1013 阅读 · 0 评论 -
解析命令行的getopt_long()函数
解析命令行的getopt_long()函数头文件 #include函数原型 int getopt_long(int argc,char * const argv[],const char *optstring,const struct option *longopts,int *longindex)函数说明 getopt被用来解析命原创 2012-12-07 20:21:04 · 834 阅读 · 0 评论 -
程序员面试题精选100题(32)-不能被继承的类[C/C++/C#]
程序员面试题精选100题(32)-不能被继承的类[C/C++/C#] 题目:用C++设计一个不能被继承的类。分析:这是Adobe公司2007年校园招聘的最新笔试题。这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目。在Java中定义了关键字final,被final修饰的类不能被继承。但在C++中没有final这个关键字,要实现这个要求还是需要花原创 2012-11-25 21:37:05 · 742 阅读 · 0 评论 -
visual studio 出现:1>项目 : error PRJ0003 : 生成“cmd.exe”时出错。
visual studio 出现:1>项目 : error PRJ0003 : 生成“cmd.exe”时出错。 Visual Studio 2005调试程序时老是提示"生成“cmd.exe”时出错".------ 已启动生成: 项目: bstore, 配置: Debug Win32 ------正在编译资源清单...正在链接...正在嵌入清单...项目 : error原创 2012-12-11 15:37:56 · 1409 阅读 · 0 评论 -
优秀程序员不得不知道的20个位运算技巧
优秀程序员不得不知道的20个位运算技巧一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《编程之美》求“1的数目”时,我才开始觉得位运算是如此之美,后来读到 《Hacker's Delight》,感慨到Henry S.Warren把位运算转载 2012-12-16 10:16:57 · 654 阅读 · 0 评论 -
线程安全与Singleton
线程安全与Singleton 线程安全是个非常棘手的问题。即使你合理的使用了锁(lock),依然可能不会产生预期的效果。让我们来看看貌似合理的代码X=0;Thread 1 Thread2lock(); lock();x++; x++;unlock(); unlock();原创 2012-12-29 22:09:41 · 917 阅读 · 0 评论 -
指针数组和数组指针的区别
指针数组和数组指针的区别指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int* a[4] 指针数组 表示:数组a中的元素都为int型指针原创 2013-01-06 21:31:43 · 644 阅读 · 0 评论 -
CreateThread()和_beginthread()有什么不同?
CreateThread()和_beginthread()有什么不同? 我们知道在Windows下创建一个线程的方法有两种,一种就是调用Windows API CreateThread()来创建线程;另外一种就是调用MSVC CRT的函数_beginthread()或_beginthreadex()来创建线程。相应的退出线程也有两个函数Windows API的原创 2013-01-07 10:17:43 · 2263 阅读 · 0 评论 -
windows API
windows API一个普通的fwrite()的调用路径: Windows API现在的数量很庞大,按照功能被划分为几大类: 参考:《程序员的自我修养》原创 2013-01-07 18:09:53 · 826 阅读 · 0 评论 -
C++ ofstream和ifstream详细用法
C++ ofstream和ifstream详细用法 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器( 向流输出数据。比如说系统有一个默认的标准输原创 2013-01-23 13:15:37 · 758 阅读 · 0 评论 -
【C和指针】#if 0/#if 1...#end if
【C和指针】#if 0/#if 1...#end if一. “#if 0/ #if 1 ... #endif” 的作用 1) code中定义的是一些调试版本的代码,此时code完全被编译器忽略。如果想让code生效,只需把#if 0改成#if 1 2) #if 0还有一个重要的用途就是用来当成注释原创 2013-01-25 10:19:03 · 852 阅读 · 0 评论 -
C语言的指针类型解析
C语言的指针类型解析 指针存储了内存的地址,同时指针是有类型的,如int*,float*,那么,一个自然的猜想就是指针变量应该存储这两方面的信息:地址和指针类型,比如,就像下面的结构体:struct pointer{ long address; int type;} 举个例子:打印sizeof(int*),值为4,可见4字节是存储内存地址用的原创 2013-01-28 15:33:30 · 896 阅读 · 0 评论