C++基础知识
文章平均质量分 53
Nancy_m
挨踢人员 文艺程序员高级软件攻城诗个人铭言无淡泊以明志无宁静以致远
展开
-
C/C++基础知识:typedef用法小结
C/C++基础知识:typedef用法小结四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb;转载 2012-10-23 20:01:44 · 668 阅读 · 0 评论 -
C/C++中的Split函数—strtok
C/C++中的Split函数是strtok()其函数原型如下: char * strtok (char * str, const char * delimiters); 函数说明 strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串,当strtok()在参数str的字符串中发现到参数delimiters的分割字符时则会将转载 2013-05-09 16:56:04 · 3668 阅读 · 0 评论 -
在C++中子类继承和调用父类的构造函数方法
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法。子类能继承父类的私有成员,但子类函数不能访问,而继承自父类的函数方法是可以访问的)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。 如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅转载 2013-05-02 19:37:12 · 1490 阅读 · 0 评论 -
C++里面的取整函数
#include double ceil(double x) //向上取整 double floor(double x) //向下取整 也可以用数据类型强制转换,那要看数据的大小 可以用int()或long() 比如int(104.23) = 104原创 2013-04-23 12:46:38 · 11250 阅读 · 4 评论 -
C++ bitset类的使用与简介
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:#i nclude using std::bitset;3.5.1 bi转载 2013-04-23 11:20:23 · 1223 阅读 · 0 评论 -
VC++面向对象的static
面向对象的static关键字 (类中的static关键字) 1、静态数据成员 在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员。先举一个静态数据成员的例子。 //Example 5 #include class Myclass { public: Myclass(int a,int b,int原创 2013-04-22 11:53:13 · 2325 阅读 · 0 评论 -
VC++中面向过程的Static
面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1 #include void fn(); static int n; //定义静态全局变量 void main() { n=20;原创 2013-04-22 11:52:10 · 1521 阅读 · 0 评论 -
strcpy_s与strcpy
例子:#include#includeusing namespace std;void Test(void){char *str1=NULL;str1=new char[20];char str[7];strcpy_s(str1,20,"hello world");//三个参数strcpy_s(str,"hello");//两个参数但如果:char *str=new char原创 2013-04-09 16:17:45 · 7307 阅读 · 0 评论 -
C++ _countf
Windows宏,用来计算一个静态分配的数组中的元素的个数,而sizeof是用来计算字节数。_countof(array);参数array数组的名字返回值array数组中的元素个数备注确保array是一个静态分配的数组,而不是一个指针。如果array是一个指针,在c语言中,_countof 会产生错误的结果;在C++中,_countof 会产生编译错误。所在头文件:原创 2013-04-09 16:12:01 · 1022 阅读 · 0 评论 -
C++的qsort函数
1、函数简介功 能: 使用快速排序例程进行排序头文件:stdlib.h用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数: 1 待排序数组首地址2 数组中待排序元素数量3 各元素的占用空间大小4 指向函数的指针,原创 2013-05-11 14:52:53 · 1950 阅读 · 0 评论 -
C++类中调用与成员函数同名的全局函数
c++ 类中的方法调用本类的与全局函数同名的方法如一个类A中有成员函数test1()与test2(),而全局函数中有一个名字也为test1(),这时候若在A的test2()成员函数中调用test1()函数,调用的会是哪个?看例子:void test1(){coutclass A{void test1(){coutvoid te转载 2013-05-13 19:16:02 · 8408 阅读 · 0 评论 -
C++将文件内容一次性读入内存
结合字符串流,将文件中的内容一次性读入内存,代码如下:#include using std::ostringstream;using std::ifstream;using std::string;std::string fileContent;string strFileName="ServiceIpConfig.txt";//文件名字fin.open(strFileName原创 2013-07-19 11:41:35 · 7068 阅读 · 3 评论 -
Windows API获取系统配置文件的配置参数
在Windows平台下获取系统配置文件(如:System.ini)的配置参数。系统配置文件内容如下:[SYSTEM]ServiceIP = 10.128.11.99:60000CommuType = ShareMemory代码如下:包含头文件 Winbase.h (include Windows.h)//GetCurrentPath()函数获取可执行模块原创 2013-07-19 14:27:58 · 2894 阅读 · 0 评论 -
C++ strcpy strcpy_s strncpy strlcpy
strncpy的用法:它与strcpy的不同之处就在于复制n个字符,而不是把所有字符拷贝(包括结尾'\0')。函数原型:char * strncpy(char *dst,const char * src, int n) 当src的长度小于n时,dst内的未复制空间用'\0'填充。否则,复制n个字符到dst,没有加'\0'。这里就要注意在字符串dst结尾处理加'\0'的情况了strcp原创 2013-06-19 15:38:51 · 3582 阅读 · 0 评论 -
C++你所不知道的sprintf_s与sprintf的不同
sprintf_s 与sprintf的不同只是缓冲区的大小进行了安全处理吗? NO!int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format [,argument] ...);int sprintf(char *buffer,con原创 2013-06-18 11:48:40 · 61168 阅读 · 5 评论 -
C++string类型字符串的存储方式
不知道你们有没有看过string类型变量的成员数据,在string变量中好像真正存储字符串的是一个叫_Ptr的指针,它指向string所存储的字符串首地址。当string变量被定义时,如果未初始化,_Ptr就是一个指向NULL的指针,而且_Ptr看起来像一个const char*类型的指针,如果它是一个空串,你无法使用str[0]='w'这样的赋值语句(假设str为string类型)。问题如下原创 2013-06-05 13:04:30 · 11781 阅读 · 6 评论 -
C++中new与delete问题学习
C++中new与delete问题学习一.new char与delete问题1. 问题程序[cpp] view plaincopy#include using namespace std; void main() { char* des = new char()转载 2013-06-14 11:40:56 · 1347 阅读 · 0 评论 -
C++Vector的使用误区
初始化vector并传引用到DLL中,DLL中为该引用添加节点,vector内存释放时会报堆栈错误,原因?这个问题其实挺好避免的,说白了就是不要一个模块new,另一个模块delete,不要认为你的vector的节点数据在栈上,vector的本质就是一个变长数组,怎么会在栈上呢,数据肯定是在堆上的,这样你就是在dll中申请的存储,在主程序里面释放的存储,出错很正常。原因简要的分析一下原创 2013-06-05 10:30:57 · 5905 阅读 · 1 评论 -
__declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定
DLL可以使用两种方法将公共符号导入到应用程序中或从 DLL 导出函数: 生成 DLL 时使用模块定义 (.DEF) 文件。 在主应用程序的函数定义中使用 __declspec(dllimport) 或 __declspec(dllexport) 关键字。 使用 .DEF 文件模块定义 (.DEF) 文件是包含一个或多个描述各种 DLL 属性的 Module 语句的文本文件。如转载 2013-05-14 19:13:18 · 1261 阅读 · 0 评论 -
C++获取计算机主机信息(计算机名称、IP)
#include #include #include #include #include "winsock2.h"#pragma comment(lib,"ws2_32.lib")using namespace std;int main(int argc, char* argv[]){ CString m_IP;//IP地址临时变量 CString m_LocalIP; //原创 2013-04-08 16:08:17 · 9581 阅读 · 0 评论 -
C++静态成员链接时 "unresolved external symbol " : static "
Why are classes with static data members getting linker errors?Because static data members must be explicitly defined in exactly one compilation unit. If you didn't do this, you'll probably get原创 2013-04-07 14:41:35 · 2761 阅读 · 0 评论 -
C++标准IO库
1、标准库的类型头文件 类型iostream istream 从流中读取 ostream 写到流中去 iostream 对流进行读写fstre原创 2012-11-14 14:25:01 · 732 阅读 · 0 评论 -
Printf()输出格式控制
Printf()输出格式控制1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e原创 2012-11-07 11:48:28 · 941 阅读 · 0 评论 -
scanf, sscanf 函数用法
名称:sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型:Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );int scanf( const char *format [,argument]... ); 说明:sscanf与scanf类似,都是用于输入的,只是后转载 2012-11-07 11:41:47 · 523 阅读 · 0 评论 -
WaitForSingleObject 和 WaitForMultipleObjects
WaitForSingleObject 和 WaitForMultipleObjects:1.WaitForSingleObject 等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止。这些等待函数中最常用的是WaitForSingleObject: DWORD WaitForSingleObject(HANDLE hObject, DWORD转载 2012-10-27 15:12:27 · 1097 阅读 · 0 评论 -
C++ CArray的使用
templateclass CArray:public CObject参数 TYPE 模板参数指定存储在数组中的对象的类型。TYPE是一个由CArray返回的参数。ARG_TYPE 模板参数指定用于访问存储在数组中对象的参数类型。通常是一个对TYPE的参考。ARG_TYPE是一个传递给CArray的参数。 说明 CArray类支持与C语言的Array相似的数组,但是必要时可转载 2012-11-03 09:20:28 · 10695 阅读 · 0 评论 -
C++ CArray
?我们在使用vc进行比较复杂的编程时,经常需要用到复杂的数组结构,并希望能实现动态管理。由于C++并不支持动态数组,MFC提供了一个CArray类来实现动态数组的功能。有效的使用CArray类,可以提高程序的效率。MFC提供了一套模板库,来实现一些比较常见的数据结构如Array,List,Map。CArray即为其中的一个,用来实现动态数组的功能。CArray是从COb转载 2012-11-03 11:32:10 · 2970 阅读 · 0 评论 -
C++STL-算法transform
template OutputIterator transform ( InputIterator first1, InputIterator last1, OutputIterator result, UnaryOperator op );template < class InputIterator1, class InputI转载 2012-10-24 20:25:24 · 2827 阅读 · 0 评论 -
generate和generate_n算法
generate和generate_n算法分类: 数据结构与算法 C++ & API算法目的用发生器对容器进行填充templatetypename ForwardIterator, typename Generator>void generate(ForwardIterator first, ForwardIterator last, Generator转载 2012-10-24 20:04:55 · 1858 阅读 · 0 评论 -
win32应用程序和win32控制台应用程序
win32应用程序是有窗体的(当然也可以没有),有Windows消息循环机制的。而win32控制台应用程序只是在控制台下运行的程序,类似以前dos的程序。Win32 Application和Win32 Console Application 都是工作在32位Windows环境的程序。 其中Win32 Application 就是普通的常见的窗口应用程序,当然有的界面做得比较个性化,原创 2012-11-20 09:43:07 · 12192 阅读 · 0 评论 -
GetMessage和PeekMessage
深入GetMessage和PeekMessage Bob GundersonMSDN技术组作于:1992年11月11日 Creamdog译于:2002年3月13日 译者的话该文重点讲述了Windows处理事件、消息的具体过程和步骤。尤其是在系系处理鼠标键盘事件的过程上做了详解。通过这篇文章,你将对Windows的消息处理机制有一个较全面的了解。概念转载 2013-01-25 15:47:43 · 973 阅读 · 0 评论 -
C++ 获取日历时间
获得日历时间 我们可以通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t * timer); 如果你已经声明了参数timer,你可以从参数timer返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NUL),函原创 2013-04-01 18:09:44 · 4243 阅读 · 0 评论 -
C++类模版的继承
类模板可以继承也可以被继承。 1.在一个类模板中,一个非依赖型基类是指:无须知道模板实参就可以完全确定类型的 基类。 例如: template class Base{ public: int basefield; typedef int T; }; class D1:public Base >{//实际上不是模板 public:转载 2013-03-19 14:54:32 · 12769 阅读 · 0 评论 -
利用C++模板,代替虚函数实现类的静态多态性及动态继承
熟悉模板编程的朋友或许听到过这个技巧或者模式:Barton-Nackmann 技巧或者称 奇异循环模板模式(Curiously Recurring Template Prattern)。 其实在 《c++ 编程语言》这本bible 书里,在模板那章提到过一个很奇妙的类的实现,用的就是这个技术。当时,我就被C++模板技术叹为观止。近期在学boost库时偶然碰到了这个技巧,同时在写一个类时转载 2013-03-19 14:45:50 · 4439 阅读 · 0 评论 -
c++ 启动exe(外部程序)
关于三个SDK函数: WinExec, ShellExecute,CreateProcess 的其他注意事项:【1】定义头文件必须定义以下两个头文件:#include // 可替换为 windows.h#include 如果定义了头文件 #include 的话就不必定义 #include 了。【2】定义路径C++中所表示的路径要用 " // "而不是平原创 2013-03-06 20:47:49 · 47368 阅读 · 3 评论 -
线程通信-PostThreadMessage
#include #include #include #include #define UM_MSG1 WM_USER+1 #define UM_MSG2 WM_USER+2 DWORD WINAPI Thread1(LPVOID para) { DWORD dwThreadId = *(DWORD *)para;转载 2013-01-26 21:01:22 · 1451 阅读 · 0 评论 -
使用DLL在进程间共享数据
DLL入门浅析(5)——使用DLL在进程间共享数据 在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的,因为所有的进程用的都收同一块地址空间;而在Win32环境中,情况却发生了变化,每个进程都有了它自己的地址空间,DLL函数中的代码所创建的任何对象(包括变量)都归调用它的进程所有。当进程在载入DLL时,操作系统自动把DLL地址映射到该进程的私有空间,也就是转载 2013-01-26 20:02:45 · 1349 阅读 · 0 评论 -
PeekMessage与GetMessage 原型篇
BOOL PeekMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);当消息队列中存在消息时, PeekMessage就返回TRUE, 最后一个参数可以为:PM_R转载 2013-01-25 15:51:35 · 967 阅读 · 0 评论 -
C++中的定时器-SetTimer
先请看SetTimer这个API函数的原型UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 UINT uElapse, // 时间间隔,单位为毫秒 TIMERPROC lpTimerFunc //转载 2013-01-25 15:30:53 · 62279 阅读 · 1 评论 -
C++的栈空间和堆空间
一直都把堆栈放一起,所以很多人会误以为他们的组合是一个词语,就像“衣服”一样简单,其实不然,今天在下就将最近学习总结的一些与大家分享。 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。 2、堆区(heap):一般是由程序员分配释放,若程序员转载 2013-07-17 10:41:39 · 5333 阅读 · 0 评论