摘要:回调函数中调用类中的非静态成员变量或非静态成员函数【问题】如何在类中封装回调函数?a.回调函数只能是全局的或是静态的;b.全局函数会破坏类的封装性,故不予采用;c.静态函数只能访问类的静态成员,不能访问类中非静态成员。1. 如何让静态函数访问类的非静态成员。 a.声明一静态函数a(),将类实例对象指针做为参数传入。如:class A() { static void a(A *); //静态函数 void b(); //非静态函数 }void A::a(A * pThis){ pThis->b(); //静态函数中调用非静态函数 } b.回调函数中...
        阅读全文
        随笔分类 - C/C++
摘要:书目详情请见:C语言大学实用教程/21世纪大学计算机系列教材1、运算符的结合性概念是什么? m = -n++; // 当n=3时,m=_?_; 自己去实际验证吧!2、测试程序只能证明程序有错,而不能证明程序无错。 当项目经理问程序猿“bug什么时候能修完?”的时候,程序猿应该紧紧抱住项目经理说:“我真没用,竟然让你问这样的问题!”——这就是真理3、增量测试 又叫“探索测试” ? 测试人员建立测试的效率常常受到以往测试结果的影响。这种方法称为探索测试法(Exploratory Testing),是确定如何测试的第一步。 探索应用程序以及熟悉应用程序的功能是学习过程中的一个必要的...
        阅读全文
        
摘要:在使用Windows程序的时候,相信没有用户喜欢看到程序突然崩溃的情形吧!为了避免程序崩溃,程序员在编写程序的时候最好在容易出错的地方使用异常处理机制来保证友好的用户体验。特别是编写C/C++代码的时候,崩溃是经常的事情! 今天一位同事给我说,编写C/C++代码崩溃的原因主要是因为内存操作违规。如果每次操作一块内存或指针之前都检查内存或指针是否有效,那么可以降低程序崩溃的次数。但是这会让程序员很厌烦的,哈哈。所以在适当的地方加上异常处理,即使崩溃也会让程序员更好的改善程序。当然,程序效率必然降低! 幸好C++规范中有异常处理机制: try catch 但是在Visual Studio...
        阅读全文
        
摘要:本地时间(LocalTime)转UTC时间(Time_t格式)View Code #include <time.h>#include <stdio.h>#include <stdlib.h>#include <windows.h>long GetLongTimeByStrInC(char* strTime){ if(strTime == NULL) return 0; char years[5] ={""}, month[3] = {""}, day[3] = {""}, \ hour[
        阅读全文
        
摘要:Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广泛采用。 目前相当一部分操作系统使用32位二进制数字表示时间。此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 11111111 11111111 11111111)。其后一秒,二进制数字会变为10000000 0...
        阅读全文
        
摘要:CRT原先是指Microsoft开发的C Runtime Library(C语言运行时库),用于操作系统的开发及运行。后来在此基础上开发了C++ Runtime Library,所以现在CRT是指Microsoft开发的C/C++ Runtime Library。在VC的CRT/SRC目录下,可以看到CRT的源码,不仅有C的,也有C++的。 CRT原先的目的就是支持操作系统的运行。因为Windows操作系统除汇编部分外,都是用C/C++编写的,所以内核及许多关键服务都在CRT上运行(它们都采用dll技术动态链接)。此外,用VC编写的C/C++程序也用到它们(可以动态链接,也可以静态链接,...
        阅读全文
        
摘要:【参考资料 感谢作者】检测C++中的内存泄漏浅谈C/C++内存泄漏及其检测工具 我想还是在工程中加入内存检测的代码好点,检测工具不会用啊!
        阅读全文
        
摘要:static 有两种用法:面向过程程序设计中的 static 和面向对象程序设计中的 static。前者应用于普通变量和 函数,不涉及类;后者主要说明 static 在类中的作用。 面向过程设计中的 static 全局变量、局部变量、静态全局变量、静态局部变量的区别 C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6 种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。 从作用域看: 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他 不包含全局变量定义的源文件需要用 extern 关键字再...
        阅读全文
        
摘要:Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义。谨记:声明可以多次,定义只能一次。在使用中,要形成一种风格。 函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern的。但是引用的时候一样是需要声明的。而全局变量在外部使用声明时,extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此标记存储空间在执行时加载如内存并初始化为0。而局部变量的声明不能有extern的修饰,且局部变量在运行时才在堆栈部分分配内存。 引用性声明、定义性声明 强符号、弱符号 出现在...
        阅读全文
        
摘要:wsprintf要求的第一个参数是LPTSTR,假设环境是UNICODE的,那么LPTSTR相当于就是wchar_t*就是宽字符指针,在非Unicode环境下就是char*。 有关格式化字符串的函数还有如下,详细用法各位可以查看MSDN,和上面所介绍的都差不多: sprintf单字节版本的C/C++库函数 swprintf宽字节版本的C/C++库函数 而我们上面的wsprintf和上面两个函数看起来很相似,大家不要搞混淆了啊,wsprintf最前面的w不是代表Wide,宽字节的意思了,而是Windows的W,代表是windows的API函数了,其实它是一个宏这在上面已经说过...
        阅读全文
        
摘要:第一篇 动机 讲述C++什麽地方吸引了作者,和作者为什麽要在编程中使用C++。 一开始,作者就提出了C++本质——抽象和封装:类。抽象可以帮助设计者可以有所侧重,C++使我们更容易把程序看作抽象的集合,同时也隐藏了那些用户无须关心的抽象工作细节。封装则是C++可以把问题精心划分为分割良好的模块,使得模块与模块之间的信息得到很好的隐藏。模块化不完全同于C中也能实现模块化的函数,书中Page4上小题“不用类来实现”中已经阐述了这个观点——C中函数模块化也是有效的,但是与C++类有3个明显的缺点:①C中函数不是内联的,因此即使当跟踪关闭的时候,它还能保持函数调用的开销(“效率”是使C++经久不...
        阅读全文
        
摘要:头文件:#include <iostream>#include <iomanip>using namespace std;功能:std::setw :需要填充多少个字符,默认填充的字符为' '空格std::setfill:设置std::setw将填充什么样的字符,如:std::setfill('*')示例:View Code #include <stdio.h>#include <tchar.h>#include <iostream>#include <iomanip>int _tmain(
        阅读全文
        
摘要:使用C/C++语言开发软件的程序员经常碰到这样的问题:有时候是程序编译没有问题,但是链接的时候总是报告函数不存在(经典的LNK 2001错误),有时候是程序编译和链接都没有错误,但是只要调用库中的函数就会出现堆栈异常。这些现象通常是出现在C和C++的代码混合使用的情况下或在C++程序中使用第三方的库的情况下(不是用C++语言开发的),其实这都是函数调用约定(CallingConvention)和函数名修饰(DecoratedName)规则惹的祸。函数调用方式决定了函数参数入栈的顺序,是由调用者函数还是被调用函数负责清除栈中的参数等问题,而函数名修饰规则决定了编译器使用何种名字修饰方式来区分不同
        阅读全文
        
摘要:rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数:函数一:int rand(void);从srand (seed)中指定
        阅读全文
        
摘要:(转载,原文链接:http://www.enjoysoft.cn/blog/post/62.html) 使用C++标准库的iostream,可以方便地将控制台、文件、字符串以及其它可扩充的外部表示作为流来处理,但要处理中文,却会碰到很多问题。本人原来没怎么用过这个iostream,这几天尝试用这个写点东西,一会儿不能输出中文,一会儿不支持中文文件名的,搞得头大。网上搜了搜,没有发现适用于所有情况的解决方案。不过后来自己经过多次测试,基本解决了这些问题,现在写成文字作为一个总结,也供碰到同样问题的朋友参考。关于C语言中的 printf和wprintf的中文输出,本文也进行了探讨。 需要说明的..
        阅读全文
        
摘要:之所以抛弃char *的字符串而选用C++标准程序库中的string类,是因为它和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,它集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 =进行赋值操作, ==进行比较, +做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。首先,为了在我们的程序中使用string类型,我们必须包含头文件<string>。如下:#include<string> //注意这里不是string.h(string.h是C字符串头文件)1.声明一个C++字符串声明一个字符串变量很简单:
        阅读全文
        
摘要:1 #include <stdio.h> 2 3 int&foo(int a) 4 { 5 static int t; 6 t = a; 7 return t; 8 } 9 10 void main(void)11 {12 if (foo(1) == foo(2))13 {14 printf("right!\n");15 }16 return;17 } 最后结果为:right! 下面为执行过程中的汇编代码:16: if (foo(1) == foo(2))00401078 push 10040107A c...
        阅读全文
        
摘要:1 #include <stdio.h> 2 3 struct MyStruct 4 { 5 int a; 6 MyStruct(); 7 } 8 9 MyStruct::MyStruct()10 {11 a =10;12 }13 14 void main(void)15 {16 MyStruct test;17 printf("%d\n", test.a);18 } 最后结果是:10 另外,将上述代码修改如下: 1 #include <stdio.h> 2 3 struct MyStruct 4 { 5 int a:4; // 注意!!! 6 M.
        阅读全文
        
摘要:char *strtok(char *s, const char *delim);作用: 分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。说明: strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回下一个分割后的字符串指针。返回值: 从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。 所有del...
        阅读全文
        
摘要:string::c_str的介绍: c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进行相应的操作转化,下面就是这一转化过程。 c++语言提供了两种字符串实现,其中较原始的一种只是字符串的c语言实现。与C语言的其他部分一样,它在c++的所有实现中可用,我们将这种实现提供的字符串对象,归为c-串,每个c-串char*类型的。 标准头文件<cstring>包含操作c-串的函数库。这些库函数表达了我们希望使用的几乎每种字符串操作。 当调用库函数,客户程序提供的是string类型参数,而库函数内部实现用的是c-串,因此需要将string对象,转化为
        阅读全文
        
 
                    
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号