2011年5月10日
摘要:
在微软即将发布的Visual Studio 2010正式版中,其对C++语言做了一些修改,本文对此做了小结,与大家分享。 Lambda表达式 很多编程编程语言都支持匿名函数(anonymous function)。所谓匿名函数,就是这个函数只有函数体,而没有函数名。Lambda表达式就是实现匿名函数的一种编程技巧,它为编写匿名函数提供了 简明的函数式的句法。同样是Visual Studio中的开发语言,Visual Basic和Visual C#早就实现了对Lambda表达式的支持,终于Visual C++这次也不甘落后,在Visual Studio 2010中添加了对Lambda表达式的支持
阅读全文
posted @ 2011-05-10 00:25
COS
阅读(745)
推荐(1)
摘要:
转自:http://tieba.baidu.com/f?kz=727217617(1)为什么要使用拷贝构造函数? 当你把一个对象用值传递的方式传参的话,会产生一个副本,或者把一个对象return传出的时候也会产生副本。如果你没有定义一个拷贝构造函数的时候,副本是原对象的一个浅拷贝,又假如你的对象是一个包含指针的类对象,发生浅拷贝的时候只是将指针对应的复制,并没有开辟空间。1、值传递传参,函数内部对象的改变将导致外部的改变,因为副本和原对象的指针指向同一块内存。2、返回一个对象时,在函数作用域中的变量已经失效,其传出来的结果就可想而知了。这样就会出现很多问题的。(2)拷贝构造函数的概念 拷贝构造
阅读全文
posted @ 2011-05-10 00:02
COS
阅读(803)
推荐(3)
2011年5月9日
摘要:
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。一般格式 其格式一般为: #Pragma Para。其中Para 为参数,下面来看一些常用的参数 常用参数 message 参数 Message 参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #Pragma message(“消息文本”) 当
阅读全文
posted @ 2011-05-09 18:13
COS
阅读(440)
推荐(2)
摘要:
几种函数调用方式 __cdecl 是C DECLaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。 _stdcall 是StandardCall的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是this指针。这些堆栈中的参数由被调用的函数在返回后清除,使用的指令是 retnX,X表示参数占用的字节数,CPU在ret之后自动弹出X个字节的堆栈空间
阅读全文
posted @ 2011-05-09 18:03
COS
阅读(579)
推荐(1)
2011年5月8日
摘要:
c++中的delete和delete[] 昨天写了一篇关于delete和delete[]的文章,有位仁兄指出我的结论是错误的,那样的结果只会在特定的编译器程序。为了不会误导大家,文章意见删除。回家后仔细看了《Effective C++》,是我看书太不仔细了,虽然忘了那位仁兄是谁了,在这里还是谢谢你。现将《Effective C++》中正确的观点、结论摘录如下: 1. 当你使用new时,有两件事会发生。第一,内存被配置(透过函数operator new)。第二,会有一个(或以上)的constructors针对此内存被调用。当你使用delete时,也有两件事发生:一个(或以上)的destructo
阅读全文
posted @ 2011-05-08 16:06
COS
阅读(1061)
推荐(2)
摘要:
string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常 string类的字符操作:const char &operator[](int n)const;const char &at(int n)const;char &operator[](int n)
阅读全文
posted @ 2011-05-08 14:24
COS
阅读(382)
推荐(1)
摘要:
时常在cpp的代码之中看到这样的代码:#ifdef__cplusplusextern"C"{#endif//一段代码#ifdef__cplusplus}#endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码。 要明白为何使用extern "C",还得从cpp中对函数的重载处理开始说起。在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字
阅读全文
posted @ 2011-05-08 14:12
COS
阅读(650)
推荐(1)
2011年5月7日
摘要:
下面程序的功能是用递归法将一个整数存入到一个字符数组中。存放时按逆顺序存放。如483存放成384程序本身并不难,把它拿出来也就是帮助理解递归的实现过程。#include"stdio.h"voidconvert(char*a,intn){inti;if((i=n/10)!=0)convert(a+1,i);//或者更改为convert((a++,a--),i);*a=n%10+'0';printf("%c\n",*a);}voidmain(){intnumber;charstr[10]="";scanf("%d
阅读全文
posted @ 2011-05-07 16:03
COS
阅读(1148)
推荐(2)
摘要:
ORA-00904 :“***”invalid identifier 出现这种错误的原因很有可能是,你的SQL语句中的某个字段名写错了,或者是表名写错了,总之,这类错误的出现,基本上是因为在SQL语句中,字段名与表不对应,有可能是有这个表,但是字段没有;或是表不存在。例如:select deptname from stu;//此时,stu表中没有deptname这个字段或select deptname from abcd;//此时abcd这个表是一个数据库中不存在的表,换言之,就是你写错了表名。凡此种种,如 insert into dept(deptno,deptname,stuno) val
阅读全文
posted @ 2011-05-07 08:40
COS
阅读(113604)
推荐(3)
2011年5月4日
摘要:
上周六无事,抽空学习了一下Pro *C/C++,使用的参考书是《精通Oracle 10gPro*C/C++编程》。个人感觉Pro *C/C++语法不难,就是环境设置有点麻烦。编程就是这样,开头是一个坎,编译环境设置不好,看不到输出结果,就难以获得那种成就感。下面我以一个简单例子来说明Pro *C/C++的编译环境的设置。这次开发环境是:Win XP sp2,VC++6.0,OCI: version 9.2, Oracle DataBase 10g Enterprise Edition Release 10.1.0.2.0。 书上说Oracle为Windows平台提供了Pro *C/C++图形界
阅读全文
posted @ 2011-05-04 12:27
COS
阅读(1791)
推荐(1)
2011年4月28日
摘要:
题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。 解说: 1.strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) { if ((strDest==NULL)||(strSrc==NULL)) //[1] throw "Invalid argument(s)"; //[2] char * strDestCopy=strDest;//[3]
阅读全文
posted @ 2011-04-28 10:50
COS
阅读(1049)
推荐(2)
2011年4月27日
摘要:
快速排序,是分治递归的应用。算法的时间复杂性为:O(nlogn)。算法的递归深度接近于logn。因此,所需要的工作单元为O(logn)。//快速排序#include<iostream.h>intcount=0;voidswap(int&a,int&b){inttemp;temp=a;a=b;b=temp;}intsplit(intarray[],intlow,inthigh){inti=low;//保存枢点元素的位置,初始值为lowintj;intx=array[low];for(j=low+1;j<=high;j++){if(array[j]<=x){
阅读全文
posted @ 2011-04-27 19:30
COS
阅读(359)
推荐(1)
摘要:
一、如何判断一个单链表是有环的?(注意不能用标志位,最多只能用两个额外指针) struct node { char val; node* next;}bool check(const node* head) {} //returnfalse : 无环;true: 有环 一种O(n)的办法就是(搞两个指针,一个每次递增一步,一个每次递增两步,如果有环的话两者必然重合,反之亦然):bool check(const node* head) { if(head==NULL) return false; node *low=head, *fast=head->next; while(fast!=N
阅读全文
posted @ 2011-04-27 09:01
COS
阅读(423)
推荐(1)
摘要:
我们都知道STL标准模板库非常强调软件的复用,traits技术是采用的重要手段。traits的中文意思就是特性,traits就像特性萃取机,提取不同类的共性,以便能统一处理。traits依靠显示模板特殊化来把代码中因类型不同而发生变化的片段拖出来,用统一的接口来包装。这个接口可以包含一个C++类所能包含的任何东西,如内嵌类型、成员函数、成员变量。作为客户的模板代码,可以通过traits模板类所公开的接口来间接访问。下面是一个简单实例:已知整型数组类CIntArray,浮点数组类CFloatArray,求整型或浮点数组的和乘于相应的倍数并输出。#include<iostream>us
阅读全文
posted @ 2011-04-27 08:09
COS
阅读(799)
推荐(2)
2011年4月26日
摘要:
学习C++和编程的50个观点1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看; 4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言; 5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点; 6.会用Visual C++,并不说明你会C++; 7.学cla
阅读全文
posted @ 2011-04-26 21:42
COS
阅读(346)
推荐(1)