C/C++/MFC
文章平均质量分 75
xiven
慈悲没有敌人,智慧没有烦恼。
展开
-
构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
对象是由“底层向上”开始构造的,当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。因为,构造函数一开始构造时,总是要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时,如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。 下面简单介绍下这三个函数转载 2009-07-13 12:21:00 · 11227 阅读 · 2 评论 -
int与CString,char*与CString,float与CString之间的相互转化
作运算时需要使用int,float等的类型,但是显示时需要CString类型。所以实现int与CString,char*与CString,float与CString之间的转化是一个很重要的问题1.int与CString(1),int到CStringint i;CString str;str.Format("%d",n);(2),CString到intCString str="1";int n=转载 2009-07-08 21:16:00 · 2256 阅读 · 0 评论 -
static,const和typedef关键字的几种用途
static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体 ,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内; (4)在类中的sta转载 2009-07-13 13:03:00 · 1666 阅读 · 0 评论 -
GetMemory错误讲解(指针练习)
错误程序:void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( “%s”,str );} 这个一个考验对指针理解的题目,上面程序在运行之后:原创 2009-07-13 17:47:00 · 30362 阅读 · 11 评论 -
c++建立DLL 及c# 调用
1,C++建立一个标准DLL在VC++中new一个Win32 Dynamic-Link Library工程,在建立的工程中添加lib.h及lib.cpp文件,/* 文件名:lib.h */#ifndef LIB_H#define LIB_Hextern "C" int __declspec(dllexport)add(int *x, int *y);#endif/*原创 2009-10-15 15:29:00 · 1764 阅读 · 0 评论 -
(转)彻底搞定C指针-函数名与函数指针
(转自)http://blog.pfan.cn/whyhappy/6030.html 函数名与函数指针一 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){ MyFun(10); //这里是转载 2009-11-06 11:50:00 · 1155 阅读 · 0 评论 -
解释与编译
用高级语言或汇编语言编写的程序称为源程序。计算机不能直接执行源程序,必须先把源程序翻译成为用"1"和"0"这两个机器代码表示的目标程序,即用机器语言编码的程序。语言处理就是将源程序翻译成目标程序。翻译方式一般分为编译和解释两种。 区别: 一:执行速度 编译是把源代码全部转换为可以直接执行的指令,从而程序运行速度比较快。 解释是把当前行的代码转换为可以转载 2009-11-02 15:23:00 · 3605 阅读 · 0 评论 -
C++ note I
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------左值与右值定义左值:指原创 2010-01-26 14:40:00 · 750 阅读 · 0 评论 -
内联函数/回调函数/仿函数(functor)-------(c++)
回调函数 回调函数就是一种利用函数指针进行函数调用的过程. 而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。 应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。(一般为标准Window原创 2010-03-20 15:55:00 · 2155 阅读 · 0 评论 -
C++模板
--------总结自《C++ Primer》定义: 模板就是参数化的类和函数,实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。 C++ 是一种“强类型”的语言,也就是说一个变量,编译器必须确切的知道它的类型,而模板就是构建在这个强类型语言基础上的泛型系统。 声明:模板函数template{函数定义}模板类templateclass ...-----------原创 2010-03-21 11:09:00 · 703 阅读 · 0 评论 -
C++ NEW的使用及 基类指针转换成派生类指针 及static_cast和dynamic_cast的说明
new的使用1. new() 分配这种类型的一个大小的内存空间,并以括号中的值来初始化这个变量; 2. new[] 分配这种类型的n个大小的内存空间,并用默认构造函数来初始化这些变量; 3. 当使用new运算符定义一个多维数组变量或数组对象时,它产生一个指向数组第一个元素的指针,返回的类型保持了除最左边维数外的所有维数 new的三种使用方法(摘自--http://brigh原创 2010-03-28 15:21:00 · 7371 阅读 · 1 评论 -
多重继承
继承方式 公有继承--派生类的子类和派生类对基类的成员具有一样的访问权限 私有继承--基类的公有成员和保护成员,变成派生类的私有成员 保护继承--基类的公有成员和保护成员,变成派生类的保护成员 三种继承方式中的基类的私有成员在派生类中权限不变。 派生类的构造函数中,需要初始化基类和成员对象,即赋初值。 但是对于使用无参构造函数(这里的无参函数包括默认构造函数)可以不列出基类名和原创 2010-03-27 13:04:00 · 1002 阅读 · 0 评论 -
Exit()函数
先放这 ,有空得整理在C语言的main函数中我们通常使用return (0);这样的方式返回一个值。 但这是限定在非void情况下的,也就是void main()这样的形式。 exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳出操作系统。 exit(0) 表示程序正常退出, exit(1)/exit(-1)表示程序异常退出。 exit() 结束当前进原创 2009-07-12 17:07:00 · 955 阅读 · 0 评论 -
窗口重画ONPaint
WM_PAINT源头:第一次创建窗口,窗口最大、最小化,窗口大小改变、窗口移动,无效区等动作,以及调用Invalidate、InvalidateRect或InvalidateRgn、Updateindow等函数。 每个窗口(HWND)实例,在windows操作系统中,都有个上下文记录区,其中记录着当前窗口的无效区域数据。系统内核利用空闲时间检查所有窗口的无效区,如果非空,就产生一个WM_原创 2009-07-12 14:41:00 · 3347 阅读 · 0 评论 -
堆和栈的定义与区别
一、 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区 1、栈区(stack): 由编译器在需要的时候自动分配释放 ,在不需要的时候自动清楚的变量的存储区。存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap): 一般由程序员分配释放,他们的释放编译器不去管, 若程序员不释放,程序结束时可能由OS回收。注意转载 2009-07-11 22:22:00 · 4197 阅读 · 0 评论 -
sizeof()用法汇总
sizeof()功能:计算数据空间的字节数1.与strlen()比较 strlen()计算字符数组的字符数,以"/0"为结束判断,不计算为/0的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。注意:int转载 2009-05-31 21:42:00 · 898 阅读 · 1 评论 -
函数参数与函数调用(彻底理解值传递与引用传递)
函数调用的作用: ·用实参数向形式参数传递数据; ·为获得数据参数及在函数体中声明的变量分配存储空间; ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调函数。当参数表为空时,表示该函数不从调用函数接受数据。函数参数传递机制 堆栈存储区是主调函数(过程)和被调用函数(过程)在调用发生时进行通信的主要区域。 基本的参数传递机制有两种:值传递和引用传递。值传递(pas转载 2009-05-31 21:15:00 · 17602 阅读 · 2 评论 -
几种常用编码及其用法介绍
编码定义 编码是根据一定的协议或格式把模拟信息转换成比特流的过程。 在计算机硬件中,编码(coding)是在一个主题或单元上为数据存储,管理和分析的目的为转换信息为编码值(典型地如数字)的过程。 在软件中,编码意味着逻辑地使用一个特定的语言如C或C++来执行一个程序 ASCII与Binary码: 我们日常接触到的文件分ASCII和Binary两种。ASCII是“美国信息原创 2009-06-03 17:36:00 · 2234 阅读 · 0 评论 -
字符串的分隔函数strtok
strtok 原型:char *strtok(char *s, char *delim); 功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 说明:首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。 strtok在s中查找包含在delim中的字符并用NULL()来替换,直到找遍整个字符串。所有delim中包含的字符都会被滤掉,并将被滤原创 2009-06-06 18:54:00 · 1150 阅读 · 0 评论 -
C++类数据成员的初始化
C++为类中提供类成员的初始化列表类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员2.进入构造函数后在构造函数中执行一般计算 1.类里面的任何成员变量在定义时是不能初始化的。 2.一般的数据成员可以在构造函数中初始化。 3.const数据成员必须在构造函数的初始化列表中初始化。 4.static要在类的定义外面初始化。 5.数组成员是转载 2009-08-29 09:30:00 · 2426 阅读 · 0 评论 -
C run-time library (C运行时库)说明
1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritc转载 2009-06-28 17:42:00 · 655 阅读 · 0 评论 -
c/c++支持可变参数的函数
一、为什么要使用可变参数的函数? 一般我们编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数。但在某些情况下希望函数的参数个数可以根据需要确定,因此c语言引入可变参数函数。这也是c功能强大的一个方面,其它某些语言,比如fortran就没有这个功能。 典型的可变参数函数的例子有大家熟悉的printf()、scanf()转载 2009-07-01 19:09:00 · 692 阅读 · 0 评论 -
CreateCompatibleDC用法
CreateCompatibleDC Creates a memory device context that is compatible with the device specified by pDC. 假如需要对屏幕进行比较多的gdi函数操作,如果每一步操作都直接对屏幕dc进行操作,那出现的大多数可能性都是屏幕的闪烁。一个很好的解决方法就是使用内存dc,将这些操作全部先原创 2009-07-07 18:52:00 · 3207 阅读 · 0 评论 -
math函数 字符串函数··等
数学函数,所在函数库为math.h、stdlib.h、string.h、float.h int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fabs(double x) 返回双精度参数x的绝对值 long labs(long转载 2009-07-08 21:37:00 · 668 阅读 · 0 评论 -
排序算法介绍
相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定义): 1、稳定排序和非稳定排序 简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就 说这种排序方法是稳定的。反之,就是非稳定的。 比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5, 则我们说这种排序是稳定的,因为a2排序前在a4的前面,排序后它转载 2009-07-08 22:05:00 · 625 阅读 · 0 评论 -
面试总结与分析(一)
一,找出程序中的错误int set(char*strDest,const char*str){ char string[10]; char* str1 = "0123456789"; strcpy(string,str1);}这个属于数组越界的错误数组越界错误,主要表现在这几个方面:1,分配数组没有以/0结尾,计算数组大小时,导致用函数strlen去取大小时不原创 2009-07-09 23:34:00 · 1219 阅读 · 1 评论 -
c++ noteII
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------判断..字符串"a原创 2010-04-08 21:31:00 · 629 阅读 · 0 评论