
C/C++
文章平均质量分 54
Allen_Kao
这个作者很懒,什么都没留下…
展开
-
this指针和m_hWnd的区别
this指针和m_hWnd的区别 m_hWnd ① m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员,先看一下MSDN的解析: The handle of the Windows window attached to this CWnd. The m_hWnd data member is a publi原创 2013-10-25 20:14:40 · 850 阅读 · 0 评论 -
IOCP高端模型完美再现
// IOCP2.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include #include #pragma comment(lib, "WS2_32.lib")#define MAX_BUFFER 256#define M转载 2013-12-18 23:24:07 · 1982 阅读 · 0 评论 -
在VS环境下以ADO方式操作Oracle数据库
利用ADO引擎方式访问Oracle数据库的实现方法:定义数据库头文件为CDBOperation.h#pragma once #import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF"),rename("LockTypeEnum","AdoLockTyp原创 2013-12-04 11:46:50 · 1777 阅读 · 0 评论 -
Oracle将某字段查询结果按自定义格式封装输出以及解拆操作
#include #include "CDBOperation.h" #include #include #include #include #undef UNICODE #define DATA_BUFSIZE 1024typedef struct query_catalog{ u_short cat_num; //发送目录条数 u_sho原创 2014-03-05 17:07:56 · 2328 阅读 · 0 评论 -
关于memcpy拷贝结构体、结构体数组到字符数组(字符串)的问题
memcpy可以将结构体拷贝到字符数组中,但直接从字符数组中是不能取出想要的结果的。因为结构体中数据类型和字符类型是不一致的,如果真要取出数据内容,有两种方法:1.再次使用memcpy进行解析 2.强制类型转换.例如:1struct aaa {int a;int b;}aa,bb;char buffer[20];aa.a=20;aa.b=30;memcpy(bu原创 2014-03-16 12:26:24 · 29736 阅读 · 0 评论 -
CString、string、char*、char[]、 _bstr_t互相转换操作
CString 头文件#include string 头文件#include CString 转char *CString cstr;char *p = (LPSTR)(LPCTSTR)cstr;string 转 CStringCString.format(”%s”, string.c_str());char 转 CStringCString原创 2014-03-04 15:43:56 · 1116 阅读 · 0 评论 -
轻松搞定面试中的链表题目
转《 轻松搞定面试中的链表题目》 链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。综合多方面的原因,链表题目在面试中占据着很重要的地位。本文对链表相关的面试题做了较为全面的整理,希望能对找工作的同学有所帮助。链表结点声明如下:struct Li转载 2014-10-21 22:28:47 · 711 阅读 · 0 评论 -
数据结构链表(单链表和双链表)
什么是链表简单的说,链表就是由多个结点离散分配,彼此通过指针相连,每个结点只有一个前驱结点和后继结点。首节点无前驱结点,为结点无后继结点的一种存储结构。链表的结构头结点:链表的第一个有效结点前面的结点,头结点并不存放有效数据,也就是数据域为空,加头结点的主要目的是为了方便链表的操作。首节点:链表的第一个有效结点,结点包含数据域和指针域。原创 2015-04-15 10:10:24 · 822 阅读 · 0 评论 -
排序方法
经典排序算法 - 冒泡排序Bubble sort原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子例子为从小到大排序,原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |第一趟排序(外循环转载 2015-04-15 11:14:10 · 385 阅读 · 0 评论 -
const_cast函数将常量变成非常量,保护现场
void test_const(){const int a =1;int *p = const_cast(&a);*p = 2;const bool isequal = p==&a;coutcout}1 2 1使用const_cast即:*p和a的地址都一样,而且这个地址内的值也变化了,只是使用a的时候,会把栈中的a取出来使用。原创 2015-05-08 17:09:04 · 803 阅读 · 0 评论 -
深入理解C++中public、protected及private用法
这篇文章主要介绍了C++中public、protected及private用法,对于C++面向对象程序设计来说是非常重要的概念,需要的朋友可以参考下初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂。今天本文就来十分分析一下C++中public、protected及private用法。相信对于大转载 2015-06-01 00:20:25 · 1725 阅读 · 0 评论 -
JAVA中的父类引用指向子类对象
父类引用指向子类对象指的是:例如父类Animal,子类Cat,Dog。其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类。Animal animal = new Cat();即声明的是父类,实际指向的是子类的一个对象。那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态、动态链接,向上转型也有人说这是转载 2015-05-23 11:17:13 · 1219 阅读 · 1 评论 -
父类指针指向子类对象的理解
虚函数父类子类指针函数调用注意事项1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩)2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合生活习惯,在程序设计上也会给程序员带来困扰。(一般不会这么去定义)3,如果转载 2015-05-23 10:56:32 · 753 阅读 · 0 评论 -
控制反转与依赖注入
关于控制反转和依赖注入的文章和书籍很多,对其定义也解释的也仁者见仁,这里就不赘述了,这是本人(只代表个人观点)理解之后用通俗的例子和平淡的话词为您解释,希望对您有所帮助:控制反转(IoC/Inverse Of Control): 调用者不再创建被调用者的实例,由spring框架实现(容器创建)所以称为控制反转。依赖注入(DI/Dependence injection) :转载 2015-05-23 11:55:09 · 933 阅读 · 0 评论 -
静态编译与动态编译的区别
静态编译与动态编译的区别 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。 静态编译就是原创 2015-07-14 17:20:44 · 3753 阅读 · 0 评论 -
gcc创建和使用静态库、动态库
下面以工程libtest为例说明gcc创建和使用静态库、动态库的过程,libtest目录结构和内容如图1所示,其中三个文件hello.h,hello.c和main.c的内容如下。 图1libtest/include/hello.h #ifdef _HELLO_H_#define _HELLO_H_void hello();#endiflibtest/l转载 2015-07-17 17:29:41 · 550 阅读 · 0 评论 -
C++类overlode、override和overwrite详细解释
overload(重载),即函数重载:在同一个类中;函数名字相同;函数参数不同(类型不同、数量不同,两者满足其一即可);不以返回值类型不同作为函数重载的条件。override(覆盖),用于实现C++中多态:分别位于父类和子类中;子类改写父类中的virtual方法;与父类中的函数原型相同。overwrite(重写):与overload类似,但是原创 2015-10-17 11:11:11 · 989 阅读 · 0 评论 -
虚函数与纯虚函数
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};转载 2014-01-05 11:06:55 · 511 阅读 · 0 评论 -
CloseHandle(),TerminateThread(),ExitThread()的区别
线程的handle用处:线程的handle是指向“线程的内核对象”的,而不是指向线程本身.每个内核对象只是内核分配的一个内存块,并且只能由内核访问。该内存块是一种数据结构,它的成员负责维护对象的各种信息(eg: 安全性描述,引用计数等)。CloseHandle()在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,Cl转载 2013-12-18 15:03:50 · 511 阅读 · 0 评论 -
COM组件简介
HRESULT 是一种简单的数据类型,通常被属性和 ATL 用作返回值。下表说明各种不同的值。头文件 winerror.h 中包含更多的值。名称 说明 值S_OK 操作成功 0x00000000E_UNEXPECTED 意外的失败 0x8000FFFFE_NOTIMPL 未实现 0x80004001E_OUTOFMEMORY 未能分配所需的内存 0x8007原创 2013-10-29 15:22:27 · 933 阅读 · 0 评论 -
VC在控制台模式下访问Oracle数据库的操作指令
///VC在控制台模式下访问Oracle数据库的操作指令#include #include #import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF")using namespace std;#define BUFSIZE 64int main(){//char原创 2013-11-04 09:04:40 · 1123 阅读 · 0 评论 -
VC保存和显示数据库图像(BMP)
//BMP图片保存到数据库 try { _RecordsetPtr pRecordset; pRecordset.CreateInstance(__uuidof(Recordset)); pRecordset->Open("SELECT * FROM bmp",_variant_t((IDispatch*)pConnection原创 2013-11-04 15:27:07 · 1081 阅读 · 0 评论 -
VC++中使用ADO方式操作ACCESS数据库
VC++中使用ADO方式操作ACCESS数据库浏览: 2162|更新: 2011-04-09 14:24|标签: vc++64全文阅读分步阅读加入杂志步骤1234567 ADO(ActiveX Data Object)是Microsoft转载 2013-11-04 17:23:52 · 1261 阅读 · 0 评论 -
c++写入oracle数据库blob字段,读取blob到本地文件
void DlgImpRoadSection::OnOkBtnClicked(){ #pragma region 验证 CString tempStr; CString fileName; m_FilePath.GetWindowText(fileName); if (access((const char*)_bstr_t(fileName), 0) != 0) { ads_转载 2013-11-04 10:41:37 · 3264 阅读 · 0 评论 -
利用ADO方式向Oracle 数据库中插入当前日期时间
利用ADO方式向Oracle 数据库中插入当前日期时间(yyyy-mm-dd hh24:mi:ss)#include #include #import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF"),rename("LockTypeEnum","Ad原创 2013-11-05 09:43:14 · 1764 阅读 · 0 评论 -
C++存储数据结构之map
Map是c++的一个标准容器,它提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map构造函数;mapmapstring; mapmapint;mapmapstring; mapmapchar;mapmapchar; mapmapint;2. map添加数据;map maplive; 1.mapli转载 2013-11-05 10:18:31 · 2180 阅读 · 0 评论 -
struct 和typedef struct什么区别
struct{成员表列}变量名表列1,变量名表列2; 一个是声明一个结构体的原始用法,一个是把结构体取了个别名。例如struct list{ int a; char c; stuct list *next;};(注意这个分号不能少)这个结构体的类型名是struct list ;struct只是声明结构体需要的关键字。 如果你要定义一个结构体变量 你就可以 :结构体原创 2013-11-05 16:00:51 · 733 阅读 · 0 评论 -
memcpy和memmove的区别
memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count); 他们的作用是一样的,唯一的区转载 2013-11-26 09:38:40 · 703 阅读 · 0 评论 -
空字符串、'\0'、0与NULL的区别以及数组清零的特点分析
空字符串与NULL的区别:NULL说明:1、等价于没有任何值、是未知数。2、NULL与0、空字符串、空格都不同,NULL没有分配存储空间。3、对空值做加、减、乘、除等运算操作,结果仍为空。还可以这么理解:空字符串(" "):已经分配了存储空间,只是没有存储东西而已。NULL:没有分配存储空间。没有内存空间的话是不能对变量或对象进行操作的,否则会出现异常。0的ASCI原创 2013-11-25 11:34:30 · 5705 阅读 · 0 评论 -
堆区和栈区的区别(一)
堆区和栈区的区别(一)来自任我行C++blog:堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结转载 2013-12-01 09:47:30 · 843 阅读 · 0 评论 -
解决VS2010中CString 转char*的问题
char * CLogFile::cs2ca(CString str){ char *ptr; #ifdef _UNICODE LONG len; len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL); ptr = new char [len+1]; memset(pt原创 2013-12-03 15:30:30 · 931 阅读 · 0 评论 -
WCHAR,CHAR,TCHAR的区别
因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串字符串处理函数,比如:strlen和wstrlen,分别用于处理两种字符串 微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数原创 2013-12-04 10:01:33 · 1249 阅读 · 0 评论 -
C/C++面向对象编程中的学习笔记
GetDlgItem—函数功能:返回窗口中指定参数ID的子元素的句柄,可以通过返回的句柄对窗口内的子元素进行操作。原创 2013-10-25 21:00:23 · 712 阅读 · 0 评论 -
CONTAINING_RECORD宏的详细解释
宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的指针来推算出该结构体的指针! 下面从一个简单的例子开始说起: 我们定义一个结构体, 同时类型化:typedef struct{ int a; int b; int c;}ss; 这是一个很简单的结构体, 没什么特转载 2013-12-17 16:11:39 · 547 阅读 · 0 评论 -
临界区、互斥对象、WaitForSingleObject、WaitForMultipleObjects
转贴:来自 闻怡洋 http://www.vchelp.net/由于进程/线程间的操作是并行进行的,所以就产生了一个数据的问题同步,我们先看一段代码: int iCounter=0;//全局变量DOWRD threadA(void* pD){for(int i=0;i{int iCopy=iCounter;//Sleep(1000);iCopy++;//转载 2013-12-17 20:00:26 · 1174 阅读 · 0 评论 -
大端模式和小端模式
在 各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机 通信领 域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正 确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian和Little-Endian,下面先从字节序说起。一、什转载 2015-10-29 10:18:22 · 471 阅读 · 0 评论