
C++编程
文章平均质量分 79
小米的修行之路
是日已过,命亦随减;如少水鱼,斯有何乐?当勤精进,如救头燃!但念无常,慎勿放逸。
展开
-
函数体内和函数体外数组的初始化问题
如果没有显式提供元素初值,则数组元素会像普通变量一样初始化:在函数体外定义的内置数组,其元素均初始化为0;在函数体内定义的内置数组,其元素无初始化;不管数组在哪里定义,如果其元素为类类型,则自动为该数组的元素提供显式初始化。原创 2014-08-19 15:54:39 · 3517 阅读 · 0 评论 -
size_t的解释
size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。 例如:bitset的size操作返回bitset对象中二进制位中的个数,返回值类型是size_t。 例如:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标原创 2014-08-19 21:19:36 · 1128 阅读 · 0 评论 -
C++中的预处理器技术
确保头文件多次包含仍能安全工作的常用技术是预处理器,它由C++语言从C语言继承而来。预处理器是在编译之前执行的一段程序,可以部分地改变我们所写的程序。之前已经用到了一项预处理功能#include,当预处理器看到#include 标记时就会用指定的头文件的内容代替#include。C++程序还会用到的一项预处理功能是 头文件保护符, 头文件保护符依赖于预处理变量。预处理变量有两种状态:已定义原创 2014-08-20 10:24:18 · 672 阅读 · 0 评论 -
C++中数组的下标和指针
我们知道,当我们在表达式中使用数组名时,实际上使用的是指向数组首元素的指针,实际上使用数组名参加下标运算时,本质上参加运算的仍然是指向数组首元素的指针: int ia[]={0,2,4,6,8};原创 2014-08-20 20:42:53 · 2717 阅读 · 0 评论 -
函数重载和const形参的函数重载
出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。任何程序都仅有一个 main 函数的实例。main 函数不能重载。1、函数重载和重复声明的区别如果两个函数声明的返回类型和形参表完全匹配,则将第二个函数声明视为第一个的重复声明。如果两个函数的形参表完全相同,但返回类型不同,则第二个声明是错误的:Record lookup(const Acco原创 2014-09-04 22:09:34 · 1947 阅读 · 0 评论 -
C++标准转换运算符reinterpret_cast、dynamic_cast、static_cast
static_cast:转载 2014-09-05 10:57:50 · 1119 阅读 · 0 评论 -
C++类型转换方式总结
索引目录传统转换方式及用户自定义转换const_castreinterpret_caststatic_castdynamic_cast再谈为何会有那四个转换运算符看起来,我应该把导师讲过、遗漏的有关C++类型转换方面的内容都总结成文了,主要内容都在以上几篇文章中阐述完毕。上边的每一篇文章,虽然都单独着重强调一种转换方式或运算符,但是也有提到跟其他转载 2014-09-05 11:02:33 · 741 阅读 · 0 评论 -
C++中const限定符和指针
1.定义const对象const int buffsize=512;因为常量定义后就不能修改,所以定义时必须初始化.const i,j=0; //error,i没有初始化2.const对象默认为文件的局部变量//file1.ccextern const int bufsize=512; //定义并初始化//file2.ccextern const int b转载 2014-08-21 17:18:16 · 762 阅读 · 0 评论 -
详解C/C++中的typedef和#define
在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++的宏定义命令,typedef用来为一个已有的数据类型起一个别名,而#define是用来定义一个宏定义常量。下面谈谈两者在实际使用中应当注意的地方。1.typedef关键字 typed转载 2014-08-21 16:01:35 · 905 阅读 · 0 评论 -
Vs2010调试技巧
1、vs2010中的debug菜单中常用命令ContinueF5 开始调试 Stop DebugingShift+F5 停止调试Toggle BreakpointF9 设置断点Step OverF10 单步(不进入函数)Step InfoF11 单步(进入函数)Step OutShift+F11 跳出函数转载 2014-08-22 10:36:28 · 1530 阅读 · 0 评论 -
C++中箭头操作符和点操作符
先来举个例子:struct MyStruct{ int member_a; };(1)原创 2014-08-25 17:18:48 · 1182 阅读 · 0 评论 -
C++I/O标准库详解
十三、C++输入输出详解:C++标准输入输出流、文件流、字符串流13.1 C++输入和输出的概念我们经常用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件。除了以终端为对象进行输入和输出外,还经常用磁盘(光盘)作为输入输出对象,磁盘文件既可以作为输入文件,也可以作为输出文件。转载 2014-09-10 20:46:40 · 3726 阅读 · 3 评论 -
动态链接库和静态链接库详解
什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:图:编译过程静态库转载 2014-08-27 19:42:07 · 943 阅读 · 0 评论 -
switch内部的变量定义
摘自:C++primer对于switch结构,只能在它的最后一个case标号或default标号后面定义变量:case true:// error:declaration precedes a case label, skipped by case false.string file_name=get_file_name();break;case false://...原创 2014-08-28 20:52:38 · 3975 阅读 · 0 评论 -
c++ vector容器类型
vector类型为内置数组提供了一种替代表示,通常建议使用vector。为了使用vector类型必须引入相关头文件:include 使用vector有两种不同的形式,即所谓的数组习惯和STL习惯。在数组习惯用法中,我们模仿内置数组的用法定义一个已知长度的vector:vector v_array(10); //v_array中的所有元素已经被初始化为0上面的用法与转载 2014-08-18 21:40:38 · 1153 阅读 · 0 评论 -
C/C++中函数参数传递详解
昨天看了内存管理的有关内容,有一点了解,但不是很深入,发现之前写代码时有很多细节问题没有注意到,只知道这样做可以实现功能,却不知道为什么可以这样,对于采用自己的方法造成的隐患也未知,更不晓得还有其他方法可以实现,我们知道C++强大的一个原因是因为对于一个问题的答案多种解答方法或思路,我想着也许就是它难学的原因。因为你只知道一种或极少数的实现方法,却不知道其他的实现方法,换句话说,就是对这个东西很掌转载 2014-09-01 17:11:04 · 604 阅读 · 0 评论 -
C++函数中const形参与非const形参
在程序设计中我们会经常调用函数,调用函数就会涉及参数的问题,那么在形参列表中const形参与非const形参对传递过来的实参有什么要求呢?先来看一个简单的例子:[cpp] view plaincopy#include #include using namespace std; void print_str(con转载 2014-09-01 21:03:48 · 1419 阅读 · 0 评论 -
C++中返回引用的问题
大家都知道一个常识:“千万不要返回局部对象或变量的引用和指针”。 我一直很纳闷,既然所有C++权威的书上都要求“一定不要返回局部对象或变量的引用和指针”,那为什么C++编译器不从语法上直接禁掉这种用法,让你编译通不过(在技术上应该不难实现的)。如果只是建议的话,那么“返回局部对象或变量的引用和指针”是否有用武之地呢?(从理论上来讲,我认为这种做法似乎总是错误的,原因大家都知道。)转载 2014-09-02 21:38:28 · 748 阅读 · 0 评论 -
C++中this指针详解(写的不错)
this指针在建立对象时,系统会为每一个对象分配独立的存储空间,也就是给每个对象中的数据成员都分配有自己独立的存储空间。如果对同一个类定义n个对象,则有n组同样大小的空间以存放对象中的数据成员。但对于成员函数来说,对象中的数据成员。一个函数的代码段在内存中只有一份。也就是说,函数的代码段在内存中只有一份。也就是说,同一个类中的不同对象在调用自己的成员函数时,一个类中的不同对象在调用自己的成转载 2014-09-03 20:23:00 · 17649 阅读 · 8 评论 -
全局变量和局部变量详解
1.局部变量(1)局部变量也称为内部变量,他是在函数体内作定义说明的,其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。如:func (){ int x; 局部变量x的作用域 在函数体内 //...... }(2)一个函数可以为局部变量定义任何名字,而不用担心其他函数使用过同样的名字。 void main(){ int n; //等价于auto原创 2014-09-03 22:52:48 · 2420 阅读 · 0 评论 -
冒泡排序并输出到文件
读取一个文件的数据,用原创 2014-10-15 22:07:26 · 1156 阅读 · 0 评论 -
输出一组数中的次大值
有一组数,找出次大值:#includeusing namespace std;const int MinNumber=-32767;int find_sec_max(int data[],int count){ int maxnumber=data[0]; int sec_max=MinNumber; for(int i=0;i<count;i++) { if(data[i原创 2014-10-15 22:47:00 · 1118 阅读 · 0 评论 -
指针参数如何传递内存(写的很好)
参数策略如果函数的参数是一个指针,不要指望用该指针去动态申请内存。如下:void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); //st转载 2014-10-19 10:10:35 · 622 阅读 · 0 评论 -
C++ assert()函数应用方式剖析
作为一个经验丰富的编程人员来说,对于C++编程语言应该不会陌生的,它的应用可以帮助我们轻松的实现各种功能需求。在这里我们会对C++ assert()函数的一些基本应用做一个详细介绍。assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include assert.h> void assert( int expression ); C+转载 2014-10-19 10:28:44 · 687 阅读 · 0 评论 -
事件选择 - WSAEventSelect
相关内容总结于VC++驿站点击打开链接如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了五种I/O模型,分别是:■ 选择(select);■ 异步选择(WSAAsyncSelect);■ 事件选择(WSAEventSelect);■ 重叠I/O(Overlapped I/O);■ 完成端口(Completio原创 2015-11-03 10:41:36 · 600 阅读 · 0 评论 -
GetModuleFileName函数当前运行exe或dll的路径
获取当前运行exe或是dll的路径。假设执行程序1.exe的绝对路径为C:\Program Files\Dll\1.exe,那么使用GetModuleFileName后szFileName数组中存储的值就是C:\Program Files\Dll\1.exe。以下代码用来获取当前exe或是dll的相对路径,即获取路径C:\Program Files\Dll。同时我们可以进行延伸拓展,获取和相应ex原创 2016-01-22 09:38:11 · 1932 阅读 · 0 评论 -
用CreateDirectory创建文件目录
CreateDirectory这个函数的作用是创建一个新的目录。如果底层文件系统支持文件和目录上的安全描述,该功能可将指定的安全描述到新的目录。函数原型:BOOL CreateDirectory(LPCTSTR lpPathName,LPSECURITY_ATTRIBUTES lpSecurityAttributes);参数:pPathName:长指针,指向一个空结束的转载 2016-01-24 10:00:16 · 2324 阅读 · 0 评论 -
CopyFile
功能:复制文件函数原型:BOOL CopyFile(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,BOOL bFailIfExists );返回值:BOOL,非零表示成功,零表示失败。会设置GetLastError参数类型及说明 :lpExistingFileName String,源文件名lpNewFileName St原创 2016-01-24 21:55:32 · 772 阅读 · 0 评论 -
GetLogicalDriveStrings
功能:获取主机中所有的逻辑驱动器,以驱动器根路径字符串返回。函数原型如下:DWORD GetLogicalDriveStrings(DWORD nBufferLength,LPTSTR lpBuffer);参数:nBufferLength: 指向的内存空间的大小,以字节为单位。lpBuffer: 指向存储返回结果字符串的内存空间返回值:函数的返回值指明了函数调用原创 2016-01-26 09:47:36 · 6852 阅读 · 0 评论 -
SetRegistryKey
原型:void SetRegistryKey( LPCTSTR lpszRegistryKey );Void SetRegistryKey( UINT nIDRegistryKey );参数 lpszRegistryKey:字符串指针,包含了键的名字。 nIDRegistryKey:注册表中键的ID/索引。功能:SetRegistryKey 这个函数功能是设置MFC原创 2016-01-26 19:42:31 · 3222 阅读 · 0 评论 -
AfxBeginThread创建用户界面线程
m_threadManager = (CManagerThread *)AfxBeginThread( RUNTIME_CLASS(CManagerThread), THREAD_PRIORITY_NORMAL,10240,NULL);1、创建用户界面线程时,必须首先从CWinThread派生类,即CManagerThread类派生自CWinThread类。2、必须使用DECLARE_DY原创 2016-01-26 20:26:07 · 1136 阅读 · 0 评论 -
状态栏的使用详解
博客来源:鸡啄米 状态栏简介 状态栏相信大家在很多窗口中都能见到,它总是用来显示各种状态。状态栏实际上也是一个窗口,一般分为几个窗格,每个窗格分别用来显示不同的信息和状态等,如菜单项和工具栏按钮的提示信息。 用MFC向导生成的单文档或多文档程序都会自动创建状态栏,大家可以运行下VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)中创转载 2016-02-15 16:12:03 · 2638 阅读 · 0 评论 -
状态栏的设计和使用
状态栏窗口既不接受用户输入也不产生命令消息,它的作用就是在程序的控制下在窗格中显示一些文本。状态栏可支持两种类型的文本窗口——信息行窗口和状态指示器窗格。为了能够在状态栏中显示一些应用程序的特殊数据,我们必须首先禁止标准状态栏显示菜单提示及键盘状态。3.3.1 状态栏的定义应用程序在MainFrm.cpp文件中所产生的静态indicator数组就是用来定义状态栏的,其中ID_SEPARAT转载 2016-02-15 18:45:43 · 2744 阅读 · 0 评论 -
自定义消息ON_MESSAGE()
有些时候光靠windows原有的消息是不够的,需要自定义消息来满足特定的功能,比如在与外部设备通讯时,如果接收到数据,就需要进行存储,但并没有直接的消息可以使用,需要自己定义。当然自定义消息不局限于此,很多消息都可以通过自定义实现,本经验以简单例子进行说明自定义消息的创建和调用。工具/原料Visual Studio 2013方法/步骤转载 2016-02-02 16:07:26 · 6583 阅读 · 0 评论 -
ON_COMMAND和ON_UPDATE_COMMAND_UI
第一个是响应打开菜单的命令的 第二个是你打开这个菜单时,处理这个菜单的状态,比如选中、变灰等等。比如WINDOWS自带的记事本程序,它的"格式"菜单下有个"自动换行",那么在编写记事本这个程序时,对文本进行自动换行或不自动换行的操作就要放在ON_COMMAND消息响应函数里,而"自动换行"菜单项左边是否打勾的操作则放在ON_UPDATE_COMMAND_UI响应函数里.UPDA转载 2016-02-02 16:51:10 · 696 阅读 · 0 评论 -
WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数详解
本文对WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数的功能及区别做出了分析比对,有助于读者更好的对消息投递函数加以理解。详情如下:一、WM_CLOSE、WM_DESTROY、WM_QUIT区别WM_CLOSE:关闭应用程序窗口WM_DESTROY:关闭应用程序WM_QUIT:关闭消息循环只有关闭了消息循环,应用程序的进程才真正退出(在任务管理器里消失)转载 2016-02-03 16:39:04 · 2749 阅读 · 0 评论 -
怎么得到一个分割后的窗口指针或句柄???
主 题: 怎么得到一个分割后的窗口指针或句柄??? SDI程序,主窗口被分成了3个子窗口,每个子窗口有各自的视类,请问,我怎么得到其中一个子窗口的指针或句柄回复人: jiangsheng(蒋晟.MSMVP2004Jan) ( ) 信誉:2432002-01-21 17转载 2016-02-22 11:21:46 · 561 阅读 · 0 评论 -
RepositionBars的用法和参数的意义
MFC窗口位置管理详细分析及实例 在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口)。上边是工具栏,中间是视图窗口,下边是状态栏。三个窗口在框架的客户区里和平共处,互不重叠。主框架窗口的尺寸改变了,别的子窗口都能及时调整自己的尺寸以便保持相互位置关系不变,例如状态条窗口总能保持在主框架客户区底部,并且其宽度总能和主框架客户区宽度一致。工具栏窗口总能停靠在主转载 2016-02-22 20:45:07 · 3156 阅读 · 0 评论 -
VC++获取屏幕大小第二篇 物理大小GetDeviceCaps 上
上一篇《VC++获取屏幕大小第一篇像素大小GetSystemMetrics》中介绍了使用GetSystemMetrics函数来获取屏幕的像素大小,本篇将介绍使用GetDeviceCaps函数来获取屏幕的物理大小。下面来看看GetDeviceCaps函数的用法:函数功能:用于得到被定义的系统数据或者系统配置信息函数原型:获取一些设备数据// By MoreWindows( h转载 2016-02-22 22:35:17 · 792 阅读 · 0 评论 -
VC++获取屏幕大小第三篇 物理大小GetDeviceCaps 下
通常大家在表示电脑、电视、手机等电子产品的屏幕大小时会使用英寸这一长度单位来描述。要注意的一点时,英寸在描述电脑、电视、手机等电子产品的屏幕大小时是指屏幕的对角线长度。 英寸(inch,缩写为in.)在荷兰语中的本意是大拇指,一英寸就是一节大拇指的长度。当然人的大拇指的长度也是长短不一的。14世纪时,英皇爱德华二世颁布了“标准合法英寸”。其规定为:从大麦穗中间选择三粒最大的麦粒并依次转载 2016-02-22 22:43:18 · 1410 阅读 · 0 评论