随笔分类 - [30]C++
-
数组指针的用法
摘要:数组指针的用法,用处。int *a[4]; //指针数组指针数组就相当于一次声明了多个指针。数组的每一个元素都是一个指针。很好理解,下面主要看数组指针int (*p)[4]; //数组指针数组指针就相当于一次声明了一个指针。只不过这个指针指向很特别,是一个数组。[]优先级大于*,故数组指针声明时要加()。例1:#include#includevoid main(){ //数组指针的用法,用处。 int b[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即1... 阅读全文
-
函数式编程和过程式编程--对递归和循环的思考
摘要:函数式编程和过程式编程--对递归和循环的思考欢迎关注:http://pchou.info/algorithm/c-cpp/2013/07/21/recursive-and-loop.html本文的代码更关注算法思想,不关注边界条件考虑经典的斐波那契数列问题1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...,我们很容易从数列本身的定义得到一个递推式:f(n)=f(n-1)+f(n-2),因此可以很容易的写出一个递归的函数来完成求该数列的第n项的值:?123456longfib(intn){if(n==0) return0;if(n==1) return1 阅读全文
-
lib 和 dll 的区别、生成以及使用详解
摘要:lib 和 dll 的区别、生成以及使用详解【目录】lib dll介绍生成动态库调用动态库生成静态库调用静态库首先介绍一下静态库(静态链接库)、动态库(动态链接库)的概念,首先两者都是代码共享的方式。静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文 阅读全文
-
C++函数调用
摘要:C++函数调用(1)这篇博客名字起得可能太自大了,搞得自己像C++大牛一样,其实并非如此。C++有很多隐藏在语法之下的特性,使得用户可以在不是特别了解的情况下简单使用,这是非常好的一件事情。但是有时我们可能会突然间发现一个很有意思的现象,然后去查资料,最终学到了C++的一个特性。所以很可能每个人理解的C++都有很大不同,我只是从自己的角度去跟大家分享而已。C++的函数调用相比于C的函数调用要复杂很多,这主要是由于函数重载、类、命名空间等特性造成的。根据Stephan T. Lavavej的介绍,C++编译器在解析一次函数调用的时候,要按照顺序做以下事情(根据具体情况,有些步骤可能会跳过的):1 阅读全文
-
什么是LeapMotion
摘要:LeapMotion预览——什么是LeapMotionLeapMotion预览这个就是LeapMotion:原文转自: LeapMotion预览LeapMotion 官网:http://leapmotion.com/开发者:https://developer.leapmotion.com (需注册)官方视频:http://v.youku.com/v_show/id_XNTgzMjc5Njgw.htmlLeap识别并绑定手,手指或者类似手指的工具,这款设备能够在毫米级别的前提下实现操作和帧率的绑定。基于Leap的SDK的软件能够分析在设备视野能的物体,并对手,手指和工具的位置,手势和动作做出.. 阅读全文
-
opencv编程入门技巧
摘要:opencv编程入门技巧最近在项目中负责图像处理模块的编程工作,主要分为两个板块,一是视频图像去雾,二是可视、红外图像融合。为了提升开发效率,遂开始学习并使用opencv图像类库,效果很好的说~因为平台是vc6.0,比较老,加之对opencv的运用是入门级,所以选择使用opencv1.0版。下面提出几个我使用时遇到的问题及解决方法,同是opencv入门的同志可以略作参考。1、 两个重要结构体类型。IplImage、CvMat。(下文中变量,mat开头为矩阵CvMat类型,im开头为图像IplImage类型) 其中IplImage主要用来读入图像和存储处理结果的图像并显示。而CvMat作为矩阵. 阅读全文
-
c,c++函数返回多个值的方法
摘要:c,c++函数返回多个值的方法最近遇到一个问题,需要通过一个函数返回多个值。无奈C,C++不能返回多个值。所以就想有什么方法可以解决。网上方法比较杂乱,一般有两种替代做法:1. 利用函数的副作用, 返回值在函数外定义, 在函数内修改, 一般为void函数。例1.1输入x,y求修改后的x,yView Code1 #include 2 using namespace std; 3 void swap(int *p,int *q) 4 { 5 int temp; 6 temp=*p; 7 *p=*q; 8 *q=temp; 9 }10 int main()11 {12... 阅读全文
-
编写可编辑的List控件
摘要:编写可编辑的List控件 今天由于项目的需要,要编写个能编辑的List控件,即双击List控件的表项能修改其中的内容。由于MFC自带的List控件是不能编辑的,所以在网上找了下怎样编写可编辑的CListCtrl控件,基本上都是继承CListCtrl这个类,我叫它CEditListCtrl控件。 具体方法:在继承的CListCtrl的类中响应鼠标双击的消息,根据鼠标双击的位置获取List控件中被选中的子表项。在获取的子表项位置上显示一个编辑框,并将编辑框中的内容设置为选中的子表项的内容,同时将焦点设置在编辑框上。当焦点离开编辑框的时候,则认为输入结束,并把编辑框中的内容重新设置为被选中子表项的. 阅读全文
-
C++套接字类CxUdpSocket的设计
摘要:C++套接字类CxUdpSocket的设计这是一个小巧的C++套接字类,类名、函数名和变量名均采用匈牙利命名法。小写的x代表我的姓氏首字母(谢欣能),个人习惯而已,如有雷同,纯属巧合。CxUdpSocket的定义如下:class XIOCTRL_CLASS CxUdpSocket : public CxSocket{public: CxUdpSocket(); virtual ~CxUdpSocket(); void operator=(SOCKET s) { m_socket = s; }public: BOOL Bind(int nPort); BOOL Di... 阅读全文
-
动态链接
摘要:动态链接4动态链接4.1概述在静态链接阶段,链接器为PE文件生成了导入表,导出表,符号表,并调整了Call指令后面的操作数,在程序调用的时候,能够直接地或者间接地定位到IAT中的某个位置,在PE文件中,该位置包含符号的名称,当PE文件加载到内存以后,该位置应该修正为符号的地址。这些已有的信息和已经完成的工作是后续动态链接的基础。动态链接的任务是:在程序的加载或者运行阶段,执行各个模块的基址重定位工作,并将IAT中的符号名称修正为动态链接库中被调用的符号的地址。动态链接分为隐式动态链接和显式动态链接,无论是隐式动态链接还是显式动态链接,都会涉及到对WindowsAPI函数:LoadLibrary 阅读全文
-
C/C++中动态链接库的创建和调用
摘要:C/C++中动态链接库的创建和调用DLL有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。下面为你介绍C/C++中动态链接库的创建和调用。动态连接库的创建步骤:创建Dll有两种方式。一、创建Non-MFC DLL动态链接库1、打开File —> New —> Project选项,选择Win32 Dynamic-Link Library —>sample project —>工程名:DllDemo2、新建一个。h文件DllDemo.h#ifdef DllDemo_EXPORTS #define 阅读全文
-
第三部分 静态链接(一)
摘要:第三部分 静态链接(一)大家好,下面开始静态链接部分的工作原理分析,由于这部分内容太多了,我计划分2个部分发出,先看下这部分的大纲:3静态链接3.1概述编译器的任务是将每一个包含C++代码的源文件编译成包含二进制机器码的目标文件。由于在一个源文件中可能会调用到其它文件中的代码或数据,这些代码或者数据可能来自于静态库中,也可能来自于动态链接库中,也可能来自于其他的源文件中。在编译阶段,编译器只专注于对单个源文件的处理,对于这些外部符号,编译器无法解析。对于调用到外部符号的地方,编译器留出位置,并用一些假数据填充。因此,编译器输出的目标文件是不完整的,是需要修正的。链接器的任务是修正目标文件中不完 阅读全文
-
函数模板的trick
摘要:函数模板的trick让gcc支持成员函数模板的trick罗朝辉 (http://www.cnblogs.com/kesalin/)本文遵循“署名-非商业用途-保持一致”创作公用协议gcc 4.7.3 不支持成员函数模板特化。如下代码:#ifndef __MEMFUNTEMPLATE_H__#define __MEMFUNTEMPLATE_H__#include class Base {};class Derived : public Base {};struct Functor { template void function() { printf(" Primary t... 阅读全文
-
COFF/PE文件结构
摘要:COFF/PE文件结构原创 C++应用程序在Windows下的编译、链接(二)COFF/PE文件结构2.1概述在windows操作系统下,可执行文件的存储格式是PE格式;在Linux操作系统下,可执行文件的存储格式的WLF格式。它们都是COFF格式文件的变种,都是从COFF格式的文件演化而来的。在windows平台下,目标文件(.obj),静态库文件(.lib)使用COFF格式存储;而可执行文件(.exe),动态链接库文件(.dll)使用PE格式存储。静态库文件其实就是一堆目标文件的集合。在“WinNT.h”头文件中定义了COFF格式文件,以及PE格式文件的数据结构。这些定义是一系列的结构体, 阅读全文
-
我的Win32开发抉择,Delphi老将复出
摘要:我的Win32开发抉择,Delphi老将复出这两天在开发公司的一个教学软件客户端,因为要考虑到给PHP、平面设计等班的同学使用,为了避免安装.Net Framework、JRE的麻烦(如果把.Net Framework、JRE打包到安装包,也会使得安装包太大),因此没有选择使用.Net、Java开发。 那么接下来就考虑使用C/C++开发了,采用纯Win32开发太累,选用QT、MFC、WxWidgets之类能简化工作,MFC就不提了简直就是一坨翔谁用谁难受,QT开发出的界面太不Native,WxWidgets界面很Native而且类库设计的超好,使用WxWidgets开发程序甚至有时候感觉不到自 阅读全文
-
C++应用程序在Windows下的编译、链接(一)概述
摘要:C++应用程序在Windows下的编译、链接(一)概述 本文是对C++应用程序在Windows下的编译、链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分。1概述1.1编译工具简介cl.exe是windows平台下的编译器,link.exe是Windows平台下的链接器,C++源代码在使用它们编译、链接后,生成的可执行文件能够在windows操作系统下运行。cl.exe和link.exe集成在Visual Studio中,随着开发工具Visual Studio的安装,它们也被安装到与VC相关的目录下。使用该编译器的方式有两种,一种是在Visual Studio开发环境中,直接点击命 阅读全文
-
重载
摘要:【C++自我精讲】基础系列三 重载0前言分二部分:函数重载,操作符重载。1函数重载函数重载:指在同一名字空间中,函数名称相同,参数类型、顺序或数量不同的一类函数,同一函数名的函数能完成不同功能。//非函数重载,只是返回值不一样void Fun(int i);int Fun(int i);//非函数重载,不在同一名字空间namespace A{ int Add(int i, int j); };namespace B{ float Add(float i, float j); };//函数重载int Add(int i, int j); float Add(float i, flo... 阅读全文
-
C++ Data Member内存布局
摘要:C++ Data Member内存布局如果一个类只定义了类名,没定义任何方法和字段,如class A{};那么class A的每个实例占用1个字节的内存,编译器会会在这个其实例中安插一个char,以保证每个A实例在内存中有唯一的地址,如A a,b;&a!=&b。如果一个直接或是间接的继承(不是虚继承)了多个类,如果这个类及其父类像A一样没有方法没有字段,那么这个类的每个实例的大小都是1字节,如果有虚继承,那就不是1字节了,每虚继承一个类,这个类的实例就会多一个指向被虚继承父类的指针。还有一点值得说明的就是像A这样的类,编译器不一定会产生传说中的那6个方法,这些方法只会在需要的时 阅读全文
-
C++ Config 配置文件类
摘要:C++ Config 配置文件类本文Config类的序列化和反序列化使用的jsoncpp, 因为jsoncpp提供的方法很简单易阅读。配置文件的格式自然也是json。1 {2 "image" : {3 "savepath" : "D:\\Documents\\Pictures\\Wayixia"4 }5 }google了一下"C++ Config", 这类的文章有不少,写的很nice,但都是ini的,ini的层次和数据结构是有限的,例如,1 [image]2 files=1.jpg,2.jpg,3.jpg当通过in 阅读全文
-
【C++自我精讲】基础系列二 const
摘要:【C++自我精讲】基础系列二 const0前言分三部分:const用法、const和#define比较、const作用。1const用法const常量:const可以用来定义常量,不可改变,const常量在定义时必须初始化(extern修饰时是特例)。//const常量const int Number = 100;extern const int Number; const指针: 1)const出现在*号左边,表示被指物是常量(不可以改变);注意:const写在类型之前和写在类型之后且*号之前是一样的。 2)const出现在*号右边,表示指针自身是常量(不可以改变); 3)const出现在*号 阅读全文