摘要: _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 夜雨阑珊 阅读(36271) 评论(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 夜雨阑珊 阅读(295) 评论(0) 推荐(0) 编辑
摘要: CArray 需要包含的头文件 <afxtempl.h> CArray类支持与C arrays相似的数组,但是必要时可以动态压缩并扩展。数组索引从0开始。可以决定是固定数组上界还是允许当添加元素时扩展当前的边界。内存对上界是连续地分配空间,甚至一些元素可为空。 和C arrays一样,CArray索引元素的访问时间是不变的,与数组大小无关。 提示: 在使用一个数组之前,使用SetSize建立它的大小和为它分配内存。如果不使用SetSize,则为数组添加元素就会引起频繁地重新分配和拷贝。频繁地重新分配和拷贝不但没有效率,而且导致内存碎片。 如果需要一堆数组中的个别数据,必须设置CDu 阅读全文
posted @ 2013-06-21 21:18 夜雨阑珊 阅读(9139) 评论(0) 推荐(0) 编辑
摘要: 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展。向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口向下转型:父类引用的对象转换为子类类型称为向下转型。前者是一个向上转型,Animal dog 引用指向new Dog();子类对象当成父类对象,只能调用父类的成员,如果子类重写了父类的方法就根据这个引用指向调用子类重写的这个方法(这个方法就是覆盖override)。这个调用过程就称为“动态绑定”。转型需要注意的问 阅读全文
posted @ 2013-06-21 21:17 夜雨阑珊 阅读(42940) 评论(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 夜雨阑珊 阅读(1432) 评论(0) 推荐(0) 编辑
摘要: 测试覆盖率之一——测试覆盖率分类关于覆盖率,网络上最常见的两个词应该是“测试覆盖率”(Test Coverage)和”代码覆盖率“(Code Coverage)。今天就来探探这两个东西。在测试里面,一般会将测试覆盖率分为两个部分,即”需求覆盖率“和”代码覆盖率“。可以看到,代码覆盖率其实是测试覆盖率的一部分而已。其中,最常讨论和关心的是”代码覆盖率“,代码覆盖率又分为程序语句和代码行覆盖,分支覆盖和条件覆盖。对于这些概念,我们逐个解释。需求覆盖率:如果需求已经定义好,这个时侯我们就需要考虑需求覆盖率了。这个时候需要注意的是,这里的需求不仅仅是指功能需求,还要包括性能需求。衡量需求覆盖率的最直观 阅读全文
posted @ 2013-06-21 21:14 夜雨阑珊 阅读(3643) 评论(0) 推荐(1) 编辑
摘要: 指针悬挂指针是C/C++语言中一种特殊的数据类型,它的值是一块内存区域的地址。使用指针要求,它的值必须是指向一块分配给你使用的地址,且使用的内存不能超过它分配时的大小。例如:char * p = new char[10];这样的代码就给p分配一块有10个字节的内存,并把这块内存的开始地址放在p中。用户在使用时,必须保证引用的内存必须在以p开始到这块内存结束的范围内。闲话少叙,说说指针悬挂。所谓指针悬挂是指指针指向了一块没有分配给用户使用的内存。指针悬挂一般由以下几种情况: 指针未初始化这不仅仅是初学者才会犯的错误。尤其是全局指针变量,不初始化就使用的情况很正常,考虑如下代码: char * g 阅读全文
posted @ 2013-06-21 21:13 夜雨阑珊 阅读(1056) 评论(0) 推荐(0) 编辑
摘要: 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用=进行赋值操作,==进行比较,+做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。首先,为了在我们的程序中使用string类型,我们必须包含头文件<string>。如下:#include<string>//注意这里不是string.hstring.h是C字符串头文件1.声明一个C++字符串声明一个字符串变量很简单:stringS 阅读全文
posted @ 2013-06-21 21:11 夜雨阑珊 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 什么是野指针? 一个母亲有两个小孩(两个指针),一个在厨房,一个在卧室,(属于不同的代码块,其生存期不同)母亲让在厨房的小孩带一块蛋糕(指针指向的对象)给在卧室的小孩,这样在卧室的孩子才肯写作业。但这个在厨房的小孩比较淘气,他在走出厨房时自己将蛋糕吃了,没能带出来。而在卧室的没有吃到蛋糕,所以不肯完成他的作业。结果母亲却不知道卧室的孩子没有吃到蛋糕,还以为作业完了。结果第二天她就被老师召唤到办公室了。事情麻烦了。 这样,那个在卧室的孩子就是野指针了,因为他没有得到应得的蛋糕,不能完成母亲交给他的作业。 这就是c中所讲的野指针。上面的小剧本不过演示了一种最基本的野指针的形成过程。更容易出现... 阅读全文
posted @ 2013-06-21 21:10 夜雨阑珊 阅读(516) 评论(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 夜雨阑珊 阅读(2061) 评论(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 夜雨阑珊 阅读(803) 评论(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 夜雨阑珊 阅读(7854) 评论(0) 推荐(0) 编辑
摘要: 1用单引号括起的字符实际代表一个整数,整数值对应于该字符在编译器中采用的字符集对应的序列值;双引号括起的字符串,代表的是一个指向无名数组起始字符的指针,该数组被双引号之间的字符和‘\0’初始化。对于'yes'这种形式的表示,不同的编译器采取的方式不同,但大都理解为"一个整数值,由y e s 所代表的整数值按照特定编译器实现定义的方式组合得到",vc采用用后一个字符覆盖前一个字符,最后得到的是最后一个字符的值2词法分析中的"贪心法则"----每一个符号应该包含尽可能多的字符,所以n-->0的含义是 n-- >0,而不是n- -& 阅读全文
posted @ 2013-06-21 20:56 夜雨阑珊 阅读(272) 评论(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 夜雨阑珊 阅读(192) 评论(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 夜雨阑珊 阅读(196) 评论(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 夜雨阑珊 阅读(200) 评论(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 夜雨阑珊 阅读(210) 评论(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 夜雨阑珊 阅读(191) 评论(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 夜雨阑珊 阅读(487) 评论(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 夜雨阑珊 阅读(311) 评论(0) 推荐(0) 编辑