摘要: _RecordsetPtr使用方法_variant_t vUsername,vID,vname; //变量声明_RecordsetPtr m_pRecordset; //记录集CString strid;_ConnectionPtr connection;m_pRecordset.CreateInstance(__uuidof( Recordset )); //创建实例m_pRecordset->Open("SELECT * FROM users",connection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,a 阅读全文
posted @ 2013-06-21 21:20 夜雨阑珊 阅读(36546) 评论(0) 推荐(0)
摘要: C++中的static简介 C#与C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1 #include <iostream.h> void fn(); static int n; //定义静态全局变量 void main() { n=20; cout<<n<&l 阅读全文
posted @ 2013-06-21 21:19 夜雨阑珊 阅读(312) 评论(0) 推荐(0)
摘要: CArray 需要包含的头文件 <afxtempl.h> CArray类支持与C arrays相似的数组,但是必要时可以动态压缩并扩展。数组索引从0开始。可以决定是固定数组上界还是允许当添加元素时扩展当前的边界。内存对上界是连续地分配空间,甚至一些元素可为空。 和C arrays一样,CArray索引元素的访问时间是不变的,与数组大小无关。 提示: 在使用一个数组之前,使用SetSize建立它的大小和为它分配内存。如果不使用SetSize,则为数组添加元素就会引起频繁地重新分配和拷贝。频繁地重新分配和拷贝不但没有效率,而且导致内存碎片。 如果需要一堆数组中的个别数据,必须设置CDu 阅读全文
posted @ 2013-06-21 21:18 夜雨阑珊 阅读(9320) 评论(0) 推荐(0)
摘要: 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展。向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口向下转型:父类引用的对象转换为子类类型称为向下转型。前者是一个向上转型,Animal dog 引用指向new Dog();子类对象当成父类对象,只能调用父类的成员,如果子类重写了父类的方法就根据这个引用指向调用子类重写的这个方法(这个方法就是覆盖override)。这个调用过程就称为“动态绑定”。转型需要注意的问 阅读全文
posted @ 2013-06-21 21:17 夜雨阑珊 阅读(43024) 评论(1) 推荐(14)
摘要: 再看面试题时 出现了一个字符串左右移动循环的问题,看了一遍还没有弄懂,就发了点时间来看了一下字符数组与字符指针的问题,最终还是得到解决,呵呵,只要肯发功夫,还是会有收获的 例如:有一组char的字符串:abcdefghijk 。你要循环左移3位变成ijkabcdefgh(也有写出ijkabcdefghi);或右移三位变成defghijkabc(也有写成cdefghijkabc); 首先我们来解决字符串循环左移的问题:方法一:利用已有的字符串函数。#include<stdio.h>#include<string.h>void rightloop(char *a, int 阅读全文
posted @ 2013-06-21 21:16 夜雨阑珊 阅读(1499) 评论(0) 推荐(0)
摘要: 测试覆盖率之一——测试覆盖率分类关于覆盖率,网络上最常见的两个词应该是“测试覆盖率”(Test Coverage)和”代码覆盖率“(Code Coverage)。今天就来探探这两个东西。在测试里面,一般会将测试覆盖率分为两个部分,即”需求覆盖率“和”代码覆盖率“。可以看到,代码覆盖率其实是测试覆盖率的一部分而已。其中,最常讨论和关心的是”代码覆盖率“,代码覆盖率又分为程序语句和代码行覆盖,分支覆盖和条件覆盖。对于这些概念,我们逐个解释。需求覆盖率:如果需求已经定义好,这个时侯我们就需要考虑需求覆盖率了。这个时候需要注意的是,这里的需求不仅仅是指功能需求,还要包括性能需求。衡量需求覆盖率的最直观 阅读全文
posted @ 2013-06-21 21:14 夜雨阑珊 阅读(3690) 评论(0) 推荐(1)
摘要: 指针悬挂指针是C/C++语言中一种特殊的数据类型,它的值是一块内存区域的地址。使用指针要求,它的值必须是指向一块分配给你使用的地址,且使用的内存不能超过它分配时的大小。例如:char * p = new char[10];这样的代码就给p分配一块有10个字节的内存,并把这块内存的开始地址放在p中。用户在使用时,必须保证引用的内存必须在以p开始到这块内存结束的范围内。闲话少叙,说说指针悬挂。所谓指针悬挂是指指针指向了一块没有分配给用户使用的内存。指针悬挂一般由以下几种情况: 指针未初始化这不仅仅是初学者才会犯的错误。尤其是全局指针变量,不初始化就使用的情况很正常,考虑如下代码: char * g 阅读全文
posted @ 2013-06-21 21:13 夜雨阑珊 阅读(1097) 评论(0) 推荐(0)
摘要: 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用=进行赋值操作,==进行比较,+做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。首先,为了在我们的程序中使用string类型,我们必须包含头文件<string>。如下:#include<string>//注意这里不是string.hstring.h是C字符串头文件1.声明一个C++字符串声明一个字符串变量很简单:stringS 阅读全文
posted @ 2013-06-21 21:11 夜雨阑珊 阅读(223) 评论(0) 推荐(0)
摘要: 什么是野指针? 一个母亲有两个小孩(两个指针),一个在厨房,一个在卧室,(属于不同的代码块,其生存期不同)母亲让在厨房的小孩带一块蛋糕(指针指向的对象)给在卧室的小孩,这样在卧室的孩子才肯写作业。但这个在厨房的小孩比较淘气,他在走出厨房时自己将蛋糕吃了,没能带出来。而在卧室的没有吃到蛋糕,所以不肯完成他的作业。结果母亲却不知道卧室的孩子没有吃到蛋糕,还以为作业完了。结果第二天她就被老师召唤到办公室了。事情麻烦了。 这样,那个在卧室的孩子就是野指针了,因为他没有得到应得的蛋糕,不能完成母亲交给他的作业。 这就是c中所讲的野指针。上面的小剧本不过演示了一种最基本的野指针的形成过程。更容易出现... 阅读全文
posted @ 2013-06-21 21:10 夜雨阑珊 阅读(530) 评论(0) 推荐(0)
摘要: clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下: clock_t clock(void) ; 这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对它的定义: #ifndef _CLOCK_T_DEFINED typedef long clock_t; #define _CLOCK_T_... 阅读全文
posted @ 2013-06-21 21:08 夜雨阑珊 阅读(2107) 评论(0) 推荐(0)
摘要: 在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下: 一.将信息写入.INI文件中 1.所用的WINAPI函数原型为: BOOL WritePrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName ); 其中各参数的意义 LPCTSTR lpAppName 是INI文件中的一个字段名. LPCTSTR lpKeyName ... 阅读全文
posted @ 2013-06-21 21:00 夜雨阑珊 阅读(827) 评论(0) 推荐(0)
摘要: 数组指针和数组引用做参数的区别(是否能够限定数组大小、数组降价) template<class T>void func1(T &, T &) {}template<class TT>void func2(TT, TT) {}int main(){ int a[10], b[10], c[20]; func1(a, b); //OK, 数组引用 func1(b, c); //ERROR,形参为引用时, 数组不能转换为指针, //b,c类型(数组长度)不匹配,参考C++ Primer P538 func2(a, b); //OK,作为数组指针 func2(b 阅读全文
posted @ 2013-06-21 20:57 夜雨阑珊 阅读(7877) 评论(0) 推荐(0)
摘要: 1用单引号括起的字符实际代表一个整数,整数值对应于该字符在编译器中采用的字符集对应的序列值;双引号括起的字符串,代表的是一个指向无名数组起始字符的指针,该数组被双引号之间的字符和‘\0’初始化。对于'yes'这种形式的表示,不同的编译器采取的方式不同,但大都理解为"一个整数值,由y e s 所代表的整数值按照特定编译器实现定义的方式组合得到",vc采用用后一个字符覆盖前一个字符,最后得到的是最后一个字符的值2词法分析中的"贪心法则"----每一个符号应该包含尽可能多的字符,所以n-->0的含义是 n-- >0,而不是n- -& 阅读全文
posted @ 2013-06-21 20:56 夜雨阑珊 阅读(283) 评论(0) 推荐(0)
摘要: 1---------printf中的%f会自动转化成double2---------static_cast的应用实际上static_cast真正用处并不在指针和引用上,而在基础类型和对象的转换上 static_cast < type-id > ( expression ) ①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。 ②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的 阅读全文
posted @ 2013-06-21 20:53 夜雨阑珊 阅读(204) 评论(0) 推荐(0)
摘要: 1、一下是使用strcpy_s与strcpy的安全性比较char szBuf[2] = {0};strcpy_s(szBuf, 2, "12131"); //新的CRT函数strcpy(szBuf, "12131"); //老的CRT函数上述代码,明显有缓冲区溢出的问题。 使用strcpy_s函数则会抛出一个异常。而使用strcpy函数的结果则未定,因为它错误地改变了程序中其他部分的内存的数据,可能不会抛出异常但导致程序数据错误,也可能由于非法内存访问抛出异常。使用新的增强安全的CRT函数有什么好处呢?简单地说,新的函数加强了对参数合法性的检查以及缓冲区 阅读全文
posted @ 2013-06-21 20:51 夜雨阑珊 阅读(211) 评论(0) 推荐(0)
摘要: 1---------带参数的构造函数B (int i) : data(i);//data=i冒号后面是成员变量初始化列表member initialization list2-----------拷贝构造函数的实现int length=strlen(other.m_data)//原始数据的长度m_data=new char[length+1];//开辟一段内存区域strcpy(m_data,other.m_data,length*sizeof(int));//拷贝数据到内存区域3--------赋值函数实现字符串的传值string &operate=(const string & 阅读全文
posted @ 2013-06-21 20:49 夜雨阑珊 阅读(212) 评论(0) 推荐(0)
摘要: 1------指针与引用的区别:1:非空区别。一个引用必须指向某个对象,必须初始化。但是指针可以赋空值,但给指针赋值之前必须制定指针的地址。变量不许为空时必须把变量赋给引用;2:合法性区别。引用使用之前不需要测试合法性。指针应防止为空;3:指针可以重新赋值指向新的对象。而引用的对象不能改变,但其内容可以改变;4:使用指针的情况--不同时刻指向不同的对象;2--------void swap(int *p,int*q){ int* temp;//不分配内存*temp=*p;//拷贝时临时给了一个地址,函数结束后不收回,造成内存泄漏*p=*q;*q=*temp;}//void swap(int* 阅读全文
posted @ 2013-06-21 20:48 夜雨阑珊 阅读(220) 评论(0) 推荐(0)
摘要: 数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]所以数组指针也称指向一维数组的指针,亦称行指针。指针数组定义 int *p[n] 阅读全文
posted @ 2013-06-21 20:46 夜雨阑珊 阅读(201) 评论(0) 推荐(0)
摘要: 贪心方法:总是对当前的问题作最好的选择,也就是局部寻优。最后得到整体最优。应用:1:该问题可以通过“局部寻优”逐步过渡到“整体最优”。贪心选择性质与“动态规划”的主要差别。2:最优子结构性质:某个问题的整体最优解包含了“子”问题的最优解。程序1 1 #include <iostream.h> 2 struct goodinfo 3 { 4 float p; //物品效益 5 float w; //物品重量 6 float X; //物品该放的数量 7 int flag; //物品编号 8 };//物品信息结构体 9 10 void Insertionsort(goo... 阅读全文
posted @ 2013-06-21 20:43 夜雨阑珊 阅读(498) 评论(0) 推荐(0)
摘要: 一、 实验目的熟悉线性表的操作和应用;利用顺序表的存储结构解决约瑟夫环问题。二、 实验原理1. 问题描述:设编号为1,2,…,n(n>0)个人按顺时针方向围坐—圈,从第一个人开始报数,当报到第M个人时,该人出圈。然后接着报,L个人出圈或圈里还剩(N-L)个人。2. 方法实现:利用线性表中循环链表的结构特点,每个节点表示一个人。用一个程序模拟人的报数出圈,1表示人还在圈里,0表示人已经出圈了。当第L个人出圈之后,报数程序结束,输出最后的在圈子里的人的情况。3. 程序设计思路:⑴先定义一个链表节点的结构体,结构体中data的值用来表示该节点所表示的人是否出圈,*next指针指向下一节点;⑵用 阅读全文
posted @ 2013-06-21 20:37 夜雨阑珊 阅读(336) 评论(0) 推荐(0)
摘要: 题目:编程实现哈希表的造表和查找算法。要求:用除留余数法构造哈希函数,用二次探测再散列解决冲突。一、 需求分析用户可以根据自己的需求输入一个顺序表(哈希表)通过用除留余数法构造哈希函数,并用开放地址的二次探测再散列解决冲突。在经过排序后显示该哈希表。程序执行的命令包括:(1)创建哈希表 (2)输出哈希表 (3)二次探测再散列解决冲突 二、概要设计⒈ 为实现上述算法,需要顺序表的抽象数据类型:ADT Hash {数据对象D:D是具有相同特征的数据元素的集合。各数据元素均含有类型相同,可唯一标识数据元素的关键字。数据关系R:数据元素同属一个集合。基本操作P:Creathash(&h)操作结 阅读全文
posted @ 2013-06-21 20:33 夜雨阑珊 阅读(554) 评论(0) 推荐(0)
摘要: 转自http://blog.csdn.net/eroswang/archive/2009/04/15/4075580.aspx最近用到了qsort,简单整理一下,方便以后的查找qsort,包含在stdlib.h头文件里,函数一共四个参数,没返回值.一个典型的qsort的写法如下qsort(s,n,sizeof(s[0]),cmp);其中第一个参数是参与排序的数组名(或者也可以理解成开始排序的地址,因为可以写&s[i]这样的表达式,这个问题下面有说明); 第二个参数是参与排序的元素个数; 第三个三数是单个元素的大小,推荐使用sizeof(s[0])这样的表达式,下面也有说明 :) ;第四 阅读全文
posted @ 2013-06-21 20:30 夜雨阑珊 阅读(607) 评论(0) 推荐(0)
摘要: c中puts()函数用来向标准输出设备(屏幕)写字符串并换行,其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针)。 功 能: 送一字符串到流stdout中 用 法: int puts(char *string); 程序例: #include <stdio.h> int main(void) { char string[] = "This is an example output string\n"; puts(string); return 0; } 说明: puts 和 printf 的用法一样,puts()函数的... 阅读全文
posted @ 2013-06-21 19:28 夜雨阑珊 阅读(15004) 评论(0) 推荐(1)
摘要: ANSI文件操作在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:typedef struct {int level; /* fill/empty level of buffer */unsigned flags; /* File status flags */char fd; /* File descriptor */unsigned char hold; /* Ungetc char if no buffer */int bsize; /* Buf. 阅读全文
posted @ 2013-06-21 19:20 夜雨阑珊 阅读(580) 评论(0) 推荐(0)
摘要: calloc是一个C语言函数 函数名: calloc void *calloc(unsigned n,unsigned size); 功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。 跟malloc的区别: calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。 C语言函数realloc函数简介 原型:extern void *realloc(void *mem_address, unsigned int newsize); 语法:指... 阅读全文
posted @ 2013-06-21 19:18 夜雨阑珊 阅读(2745) 评论(0) 推荐(0)
摘要: Unix/Linux Shell编程实战:使用嵌入文档Here Documents一、Here Documents(嵌入文档)Here Documents作为重定向的一种方式,指示shell从源文件的当前位置开始读取输出,直到遇到只包含一个单词的文本行时结束。在该过程中读到的所有文本行都将作为某一个命令的标准输入而使用。 here-documents的使用形式:command <<[-] limit_string msg_bodylimit_string 如果用双引号或单引号将”limit_string”引用起来或用转义符\将其转义,则here-document中的文本将不被扩展, 阅读全文
posted @ 2013-06-21 19:15 夜雨阑珊 阅读(671) 评论(0) 推荐(0)
摘要: 1、dos下的bat文件的语法,类似linux的shell命令http://www.cnblogs.com/SunShineYPH/archive/2011/12/13/2285570.html2、ubuntu防火墙设置,使用命令ufw=ubuntu firewallhttp://blog.sina.com.cn/s/blog_8f3de3250100xy1u.html3、c#调用WebService服务,即是网页上的一些信息服务,如天气状况,可以实时更新http://www.cnblogs.com/denylau/archive/2010/07/23/1783530.html4、init.d 阅读全文
posted @ 2013-06-21 19:05 夜雨阑珊 阅读(235) 评论(0) 推荐(0)
摘要: 闲来无事,想想C++是否一样能用dos来,编译运行程序呢,于是上网搜搜结果喜人,详见http://blog.csdn.net/xiaoqinpeng/article/details/6556843自己来总结一下步骤1、设置系统的环境变量,来让dos知道cl命令从哪来的?我的是VS2010,找到安装文件夹的的D:\Program Files\Microsoft Visual Studio 10.0\VC\bin,添加到path变量中,在cmd下运行cl命令检测是否配置完成2、若出现 找不到mspdb100.dll的问题,把这个文件也加到Path变量中D:\Program Files\Micros 阅读全文
posted @ 2013-06-21 18:40 夜雨阑珊 阅读(2246) 评论(0) 推荐(0)
摘要: 关键技术http://blog.csdn.net/master_max/article/details/1540204MFC和GTK的区别??1. 两者都是基于面向对象设计的。尽管MFC是用C++写的,而GTK+是用C写的,但思想都是面向对象的。GTK+使用glib的对象机制,由于用C写的,其实现相对有点繁琐。 2. 两者都是基于消息驱动的。这是GUI系统的共性,消息可以是硬件上报的,如鼠标事件、键盘事件和触摸屏等等,也可以是程序产生,如一个窗口给另外一个窗口 发送了一个消息。但两者并不完全相同,GTK+通过select挂在多个文件描述符上,可以同时等待多个事件源,比如socket、子进... 阅读全文
posted @ 2013-06-21 18:14 夜雨阑珊 阅读(1122) 评论(0) 推荐(0)
摘要: gtest测试框架是在不同平台上(Linux,Mac OS X,Windows,Cygwin,Windows CE和Symbian)为编写C++测试而生成的。它是基于xUnit架构的测试框架,支持自动发现测试,丰富的断言集,用户定义的断言,death测试,致命与非致命的失败,类型参数化测试,各类运行测试的选项和XML的测试报告。需要详细了解的朋友可以参阅《玩转Google单元测试框架gtest系列》该篇文章。http://www.cnblogs.com/coderzh/archive/2009/03/31/1426758.html下面就针对这篇文章建立自己的第一个测试,以及测试搭建环境准备工作 阅读全文
posted @ 2013-06-21 13:32 夜雨阑珊 阅读(6244) 评论(1) 推荐(1)
摘要: static函数函数调用的结果不会访问或者修改任何对象(非static)数据成员,这样的成员声明为静态成员函数比较好。如实现单例类的一个实例,可以返回为static类型指针且如果static int func(....)不是出现在类中,则它不是一个静态成员函数,只是一个普通的全局函数,只不过由于 static 的限制,它只能在文件所在的编译单位内使用,不能在其它编译单位内使用。静态成员函数的声明除了在类体的函数声明前加上关键字static,以及不能声明为const或者volatile之外,与非静态成员函数相同。出现在类体之外的函数定义不能制定关键字static。静态成员函数没有this指针。用 阅读全文
posted @ 2013-06-21 10:05 夜雨阑珊 阅读(231) 评论(0) 推荐(0)
摘要: 1.冒号(:)用法(1)表示机构内位域的定义(即该变量占几个bit空间)typedef struct _XXX{unsigned char a:4;unsigned char c;} ; XXX(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。struct _XXX{_XXX() : y(0xc0) {}};(3) public:和private:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个"public:”或"private:”出现为止。"private:"为默认处理。(4) 阅读全文
posted @ 2013-06-21 09:36 夜雨阑珊 阅读(682) 评论(0) 推荐(0)