
C++_原创区
文章平均质量分 74
lslxdx
个人主页: http://www.lslxdx.com
Github: https://github.com/lslxdx
展开
-
C++里,在类中使用指向类成员函数的指针
#include class A{public: //p1是一个指向非static成员函数的函数指针 void (A::*p1)(void); //p2是一个指向static成员函数的函数指针 void (*p2)(void); A(){ /*对 **指向非static成员函数的指针 **和 **指向static成员函数的指针 **的变量的赋值方式原创 2012-04-14 14:03:10 · 1441 阅读 · 0 评论 -
多叉树前序转后序
给定一颗多叉树,该多叉树可以用一个后序遍历的字符串表示为4(0),5(0),1(2),6(0),2(1),7(0),8(0),9(0),10(0),3(4),0(3)其中括号内的数字表示该节点的子节点数,比如0(3)表示节点0有3个子节点,而节点按照后序遍历的顺序排列。给定一个类似的多叉树后序遍历的字符串,试写出一个程序输出其对应前序遍历的字符串。如上述多叉原创 2012-09-18 21:19:11 · 1225 阅读 · 1 评论 -
分享一个Qt中删除文件夹的函数(非递归实现)
/*递归删除文件夹,即使里面有内容****dir :文件夹的名字,绝对路径和相对路径均可****返回值 :成功后返回true;否则返回false*/bool removeDirWithContent(const QString &dirName){ static QVector dirNames; static QString funcErrMsg="删除[%1]失败."; st原创 2012-06-03 21:16:45 · 3328 阅读 · 4 评论 -
C++中使用模板传递函数类型
首先看了常用的写法:int fi(char){ return 1;}int main(){ int (*pf)(char)=fi; //以下两种函数调用方式,没有区别 pf('a');//ok (*pf)('a');//ok return 0;}是的,你可能就此以为函数指针在调用的时候,是否解引用都无所谓了吧?我跟你想得一样,是的,这是对的,但是注意我原创 2012-11-08 22:41:29 · 3465 阅读 · 0 评论 -
C++中,operator new和operator delete重载举例
根据《Effective C++ 中文版(第三版)》所讲,语句Widget *pw=new Widget;“共调用了两个函数:一个是用以分配内存的operator new,一个是Widget的default构造函数。”对于前者,我们可以通过重载operator new符号,进行干预;对于后者,我们只能编写构造函数,但是无法阻止或增加执行次数,因为那是编译器自己增加的代码,用于在operat原创 2012-11-11 17:22:23 · 1347 阅读 · 0 评论 -
C++中,将class转换成函数指针(使用运算符重载实现,即operator函数)
这几天在看《Effective C++》,里面提到了std::tr1::function,说是可以将一个函数指针包装成一个function对象,很神奇,所以就想自己实现以下,然后想到了2中实现方式,可以将一个class转换成函数指针,通过运算符重载实现,即operator函数,第一种方式,使用typedef,第二种方式,使用模板:typedef int (*pft)(char);cla原创 2012-11-08 22:02:02 · 2153 阅读 · 1 评论 -
C++中的const在多维指针中的应用
void func1(){ const int** pp;//2次*(因为const的右边有出现了2次*)后,禁止赋值 pp=new const int*[1]; pp[0]=new int[1]; //pp[0][0]=0;//error: assignment of read-only location }原创 2013-01-31 21:40:50 · 1125 阅读 · 0 评论 -
C语言中,static关键字举例——局部static变量
C语言中,static关键字可以用在全局范围,也可以用在函数范围,还可以用在局部范围!先上实验代码:#include void func(int i){ if((i&0x01)==1){ static int j=1;//局部范围定义的static变量j j++; printf("i=%d,j=%d.\n",i,j); } else{ static int j=原创 2013-03-14 09:51:49 · 1785 阅读 · 0 评论 -
C语言中,static关键字举例——全局static变量
C语言中,可以在全局作用域中使用static关键字:被static关键字修饰的变量或函数,仅在本".c文件"中可见,而在其他".c文件"中,不可见。例如,在t1.c中的全局作用域,定义static函数func,则在t2.c中,无法使用t1.c中定义的func函数,即使在t2.c中,使用extern关键字声明了func函数。实验代码如下:1、默认使用extern修饰符/*file:t原创 2013-03-14 11:14:42 · 2031 阅读 · 0 评论 -
C++编写Lib工程和Exe工程时,发生class或函数重名后的决策过程
编号LibExe1 bool glbFunc(Cls&){return true;}bool glbFunc(Cls&){return false;},不可inline bool glbFunc(Cls&){return false;},不可2inline bool glbF原创 2013-04-15 19:42:36 · 1305 阅读 · 0 评论 -
基数排序的C++实现(解析)
基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(Tabulation Machine)上的贡献。时间复杂度是 O(k·n),其中n是排序元素个数,k是数字位数。——原创 2012-09-05 22:44:53 · 2268 阅读 · 1 评论 -
C++模板元编程之编译期间“产生从2到某个给定值之间的所有质数”
本文的灵感来自于C++模板元编程技术与应用,里面讲到“1994年,在圣迭哥举行的一次C++标准委员会会议期间,Erwin Unruh展示了一段特别的代码,可以在编译期以编译错误信息的方式产生从2到某个给定值之间的所有质数。”所以自己用一下午的时间做了一个实现,代码如下:#include using namespace std;/*声明一个质数检查器模板**原创 2012-09-02 17:30:25 · 1585 阅读 · 0 评论 -
关于C++中在函数中按值返回、临时对象、拷贝构造函数的一点理解
几乎所有C++的书籍中都强烈建议函数返回的时候,要使用按引用返回、甚至直接返回指针,尤其是涉及到class和struct的时候。如果函数返回对象,而不是指针,那么在执行return的时候,会使用被return的对象“复制构造”临时对象,然后,return语句执行完毕(遇到分号;了)函数内部创建的全部变量析构、出栈。而被“赋值构造”的临时对象则在调用该函数的语句执行完毕(遇到分号;或者右原创 2012-04-18 20:48:57 · 1945 阅读 · 1 评论 -
C++中不能返回数组的原因分析
C++中不能返回数组!也就是说,C++中,不能把数组当成函数的返回值,否则编译报错!如果非要返回的话,可以通过指针的形式返回,虽然有点曲折~那你要问了,C++中是可以把数组当成实参传递给函数的,为什么就不能返回数组呢?!!!是这样的,C++中把数组当成实参传递给函数的形参时,实参数组并没有被复制给形参,而是将形参转换成指针,然后用实参初始化了“那个指针”,也就是说,数组形参变量与实参变原创 2012-04-18 21:05:50 · 2164 阅读 · 1 评论 -
Qt中使用QHttp连接网站服务器,并传递参数(使用QHttp::request()函数实现)
Qt里提供QHttp实现Qt代码与Http服务器通信,提供GET、POST两种发送请求的方式,做过网站的同学们应该知道,前者用于传递少量数据,而后者用于传递大量数据,多大呢?应该是大于1024个字符吧~比如100+KB或1MB+以上算是比较大了!但是,如QHttp详解所讲,QHttp原生提供的get和post函数不能传递参数,只能单纯的访问页面,不能向页面传递参数,可以说功能是非常简单的。原创 2012-04-21 22:10:02 · 10397 阅读 · 8 评论 -
分享一个不使用配置文件的log4cpp的例程
#include "log4cpp/Category.hh"#include "log4cpp/OstreamAppender.hh"#include "log4cpp/FileAppender.hh"#include "log4cpp/Win32DebugAppender.hh"#include "log4cpp/PatternLayout.hh"using namespace lo原创 2012-06-02 16:24:12 · 1285 阅读 · 0 评论 -
分享一个log4cpp的配置文件
#################################################################1、log4cpp.可以省略#2、等号左右两侧的名称大小写敏感#3、rootAppender是随便取的名字#4、Win32DebugAppender等都是log4cpp类库里的类(class)#5、日志输出的开启级别(DEBUG,INFO,WARM,ERROR原创 2012-06-02 16:05:55 · 3289 阅读 · 0 评论 -
Qt中QJson的编译+开发心得
QJson是Qt中做Json传输的一个类库,可以从我的资源里下载到,QJson的中文主页在这里。下载的时候,强烈建议你用git,从gitorious上下载,而不要用http下载gzip压缩包(因为我下载的版本的gzip压缩包里少pro文件件,而且CMake的配置文件也是错的……)!否则你可能在自己编译的时候走弯路。QJson的一个例程在这里:在Qt中如何通过QJson 解析json数据原创 2012-04-18 21:44:26 · 8410 阅读 · 0 评论 -
在QThread中使用信号(SIGNAL)-槽(SLOT)
首先引用Bruce Eckel的一句话,“理解线程的概念,应该用面向过程编程的思路去理解,而不应该用面向对象编程的思路去理解”。然后,上两段代码:1、会发生槽调用的代码//ThreadSlotTest.h#ifndef THREADSLOTTEST_H#define THREADSLOTTEST_H#include #include #include using n原创 2012-06-11 21:01:47 · 7116 阅读 · 0 评论 -
C++中,类Class数组长度的问题
看如下代码:class OperatorNewCls{private: // enum {sz=10}; int arr[sz];public: /*定义析构函数后,sizeof(OperatorNewCls)的值未改变, **但是new OperatorNewCls[size]的值等于(sizeof(OperatorNewCls)*size+4), **因为在new O原创 2012-08-12 10:40:57 · 2282 阅读 · 0 评论 -
C++模板元编程之使用模板,对数组进行“编译期间求和”
编译期间求值,将计算提前到编译期间进行,可以最大限度地榨干编译器的潜力,提高程序的运行速度,用Andrei Alexanderescu的话说就是“时间花在编译期,就某种意义来说这是‘免费的’”(《C++设计新思维》P55)。所以就有了对数组在编译期间求和的需求。先上代码,再解释:#include using namespace std;//一个全局的int数组,需要对其求和co原创 2012-08-31 20:03:51 · 3424 阅读 · 2 评论 -
C++中static_cast、const_cast、reinterpret_cast的用法举例,附带举例说明强制类型转换时int和int&的区别
《C++ Primer中文版》(第4版)的5.12.6节介绍static_cast、const_cast、reinterpret_cast的用法:1、static_cast,编译器饮食执行的任何类型转换都可以由static_cast显示完成,如:double d=97.0char c1=d;//warningchar c2=static_cast(d);//ok也就是说,s原创 2012-03-25 15:54:24 · 7876 阅读 · 1 评论