C++学习文档
artwl_cn
开朗,乐观,爱交友,爱电脑。
展开
-
VC屏幕截图
函数1: CopyScreenToBitmap //将屏幕指定区域存成图片HBITMAP CxxxDlg::CopyScreenToBitmap(LPRECT lpRect) //lpRect 代表选定区域{ HDC hScrDC, hMemDC; // 屏幕和内存设备描述表 HBITMAP hBitmap,hOldBitmap; // 位图句柄 int nX, nY转载 2010-05-06 15:24:00 · 348 阅读 · 0 评论 -
C++中理解“传递参数”和异常之间的差异
从语法上看,在函数里声明参数与在catch子句中声明参数几乎没有什么差别:class Widget { ... }; //一个类,具体是什么类// 在这里并不重要void f1(Widget w); // 一些函数,其参数分别为void f2(Widget& w); // Widget, Widget&,或void f3(const Widget& w); // Widget* 类型void f4转载 2008-12-23 22:08:00 · 227 阅读 · 0 评论 -
C/C++返回内部静态成员的陷阱
背景 在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。 这是一个让无数人困扰的问题。如果你一不小心,你就很有可能在这个上面犯错误。当然目前有很多解决方法,转载 2008-12-23 22:07:00 · 124 阅读 · 0 评论 -
深入理解C++中的mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态转载 2008-12-23 22:04:00 · 131 阅读 · 0 评论 -
高手讲解:探索C++的秘密之详解extern
时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代转载 2008-12-23 22:03:00 · 158 阅读 · 0 评论 -
C++中函数指针数组的妙用
笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* buffer和 int length,buffer是数据的首地址,length表示这批数据的长度。数据的特点是:长度不定,类型不定,由第一个字节(buffer[0])标识该数据的类型,共有256(28 )种可能性。我的任务是必须对每一种可能出现的数据类型都要作处理,并且我的模块包含若干个函数,在每个函数里面都转载 2008-12-23 21:59:00 · 177 阅读 · 0 评论 -
如何在派生类中的隐藏基类的虚拟重载函数
我创建了一个类,基类中有虚拟重载函数。我想在派生类中改写基类中的虚拟重载函数。代码如下: #include class B {private: int nNumber;public: virtual void test() { cout virtual void test(int x) { nNumber = x; // 将传入的参数赋值给私有成员转载 2008-12-23 21:59:00 · 191 阅读 · 0 评论 -
C++中类的数据成员的安全隐患
在任何一本关于"C++语言程序设计"的书中都有类似于如下的描述: 在一个类中,C++用三个关键词设置访问界限:public, private和protected。它们决定了跟在他们后面的标识符的被使用情况:public意味着其后的标识符可以被用户定义的其实例引用;而private则说明其后的标识符除了类的成员函数之外,用户定义的其实例不能引用;protected为类的继承提供了接口,同时保护转载 2008-12-23 21:58:00 · 149 阅读 · 0 评论 -
C++和结构化异常处理
include "stdafx.h" #include using namespace std; class Exception { public: static void MapSEtoCE(void ) ...{_set_se_translator(TranslateSEtoCE); } operator DWORD() ...{ return er.ExceptionC转载 2008-12-23 21:57:00 · 161 阅读 · 0 评论 -
C++中的EXIT与析构函数
几乎在每本课本中几乎都是这样写的,当一个类实例化以后,必将执行构造函数,那么在该类被释放的时候,必将执行析构函数。似乎在人们的印象里,构造函数与析构函数如同一对双胞胎一样,执行完构造函数,必将会执行析构函数...... 今天我做了个实验,彻底的推翻了这个理论。代码如下:#include "stdafx.h"using namespace std;class mycs{ public: mycs转载 2008-12-23 22:11:00 · 175 阅读 · 0 评论 -
了解C++异常处理的系统开支
为了在运行时处理异常,程序要记录大量的信息。无论执行到什么地方,程序都必须能够识别出如果在此处抛出异常的话,将要被释放哪一个对象;程序必须知道每一个入口点,以便从try块中退出;对于每一个try块,他们都必须跟踪与其相关的catch子句以及这些catch子句能够捕获的异常类型。这种信息的记录不是没有代价的。确保程序满足异常规格不需要运行时的比较(runtime comparisons),而且当异常转载 2008-12-23 22:08:00 · 160 阅读 · 0 评论 -
C++中禁止异常信息传递到析构函数外
在有两种情况下会调用析构函数。第一种是在正常情况下删除一个对象,例如对象超出了作用域或被显式地delete。第二种是异常传递的堆栈辗转开解(stack-unwinding)过程中,由异常处理系统删除一个对象。 在上述两种情况下,调用析构函数时异常可能处于激活状态也可能没有处于激活状态。遗憾的是没有办法在析构函数内部区分出这两种情况。因此在写析构函数时你必须保守地假设有异常被激活,因为如果在一个转载 2008-12-23 22:09:00 · 140 阅读 · 0 评论 -
malloc函数的应用
用法:#include 或#include 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 当内存不再使用时,应使用free()函数将内存块释放。 malloc的语法是:指针名=(数据类型*)malloc(长度) 举例: #include #include原创 2008-12-25 09:56:00 · 472 阅读 · 1 评论 -
用C++控制DVD/CD驱动器的开关
在Windows资源浏览器中,可在DVD/CD光驱图标上单击鼠标右键,选择"弹出"来打开光驱仓门,你可能也发现了,菜单中并没有"关闭"命令来关闭光驱。下面,就让我们用程序来控制打开、关闭光驱。 程序的主要工作部分为CD_OpenClose(BOOL bOpen, TCHAR cDrive)函数://cDrive是光驱盘符,或者0x01为默认驱动器。//例如://CD_OpenClo转载 2008-12-23 22:04:00 · 183 阅读 · 0 评论 -
TCP通信示例程序
服务器端程序:/*程序名称:TCP通信示例程序服务器端作者:天行健完成时间:2010-4-2 17:00*/#include #include using namespace std;#pragma comment(lib,"wsock32.lib")#define BUF_SIZE 64void main(){ WSADATA ws原创 2010-04-02 17:20:00 · 282 阅读 · 0 评论 -
基本TCP套接字编程
当使用TCP/IP协议一发客户服务器服务程序时,服务器需要等待任意数量客户端的连接,以便以他们提供服务。客户端连接服务器时,必须先知道服务器的名称。在TCP/IP中,就是服务器的IP地址和端口号。bind()函数实现将服务器绑定到一个已知的名字上的功能。接下来要将服务器套接字设置为监听状态,这是通过listen()函数完成的。在监听状态下,如果客户端向服务器发起连接请求,服务器通过调用accept原创 2010-04-02 17:24:00 · 448 阅读 · 0 评论 -
ICMP报文结构
目的不可达报文 类型:3代码:0至15检验和未使用(全0)收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节源端抑制报文 类型:4代码:0检验和未使用(全0)收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节超时报文转载 2010-04-15 13:41:00 · 522 阅读 · 0 评论 -
利用WinPcap获取网卡列表
第一步:下载安装winPcap(软件+开发包) 下载地址:http://download.csdn.net/source/1822448,也可以在官方网站下载(注意是软件+开发包哦)。 第二步:导入winPcap开发包 打开VC6.0,依次点击 “工具”—>“选择”—>“目录”,在“路径”下导入解压后的开发包中Include文件夹的目录,例如:D:/WINPCAP原创 2010-03-16 14:44:00 · 760 阅读 · 1 评论 -
c++头文件全集
C、传统 C++ #include //设定插入点 #include //字符处理 #include //定义错误码 #include //浮点数处理 #include //文件输入/输出 #include //参数化输入/输出 #include //数据流输入/输出 #include //定义各种数据类型最值常量 #include //定义本地化函数 #include //定原创 2009-05-11 18:07:00 · 177 阅读 · 0 评论 -
栈的基本操作
#include #include using namespace std;#define statck_init_size 2#define stackincrement 10class student{public: long num;public : string name;};class sstack{public : stude原创 2009-04-05 01:42:00 · 569 阅读 · 0 评论 -
c++重载各种运算符
以下示例中定义了一个class test, 重载了>等符号:#include#includeusing namespace std;class test{public: int v; /*构造函数*/ test():v(0){} test(const int &a):v(a){} test(const test &t1):v(t1.v){} /原创 2008-12-26 12:40:00 · 16233 阅读 · 4 评论 -
stdlib.h头文件
stdlib 头文件里包含了C语言的一些函数 该文件包含了的C语言标准库函数的定义 stdlib.h里面定义了五种类型、一些宏和通用工具函数。 类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函数如malloc()、calloc()、real原创 2008-12-25 10:19:00 · 995 阅读 · 2 评论 -
细谈C++多态性的“动”与“静”
在我们讨论多态的时候,先看看什么是硬编码和软编码:硬编码就是把代码写死了,导致弹性不足,降低了可扩展性,例如在代码里的 if...else...;switch...case... 这些代码通常都属于硬编码,项目中的这些代码多了,就相当于说明这个代码的灵活性、扩展性、弹性等等的少了。 所以,我们要尽量使用软编码,通俗点就是“别把话说死了,留点转弯的余地”。多态性就是这种软编码特性的反映,下面我们转载 2008-12-23 22:12:00 · 140 阅读 · 0 评论 -
C++类和接口的设计原则探讨
我这篇文章的主旨是介绍一部分类和接口的高质量设计的准则。这些准则不但应该保证设计并且实现的类或者接口本身有高质量代码,而且更重要的是在工业领域应该尽可能的使代码的更新和维护不影响客户的活动,主要也就是保持二进制代码兼容(binary compatibility)和源代码兼容(source compatibility)。我希望这些准则能帮助刚从学校进入工业领域的朋友尽快适应更高标准的编程要求,尽快提转载 2008-12-23 22:10:00 · 241 阅读 · 1 评论 -
涅磐重生 C++内存管理变革
allocator引起的观念变化 接触allocator,你可以体会到了它与C++传统的new/delete观念的不同。这主要有以下几点: 1. 每个类(或者算法)本身,均有最合适它的内存管理机制,并不是向C++传统的做法那样,使用一个全局的new/delete。也许你会说,C++不也允许一个类定义自己的new和delete吗?是的,C++的确支持类定义自己的new/delete,但注意,它的转载 2008-12-23 22:07:00 · 155 阅读 · 0 评论 -
C++中通过重载避免隐式类型转换
以下是一段代码,如果没有什么不寻常的原因,实在看不出什么东西: class UPInt { // unlimited precision public: // integers 类 UPInt(); UPInt(int value); ...};//有关为什么返回值是const的解释,参见Effective C++ 条款21const UPInt operator+(const UPInt& lh转载 2008-12-23 22:05:00 · 190 阅读 · 0 评论 -
字符函数库#include
//#if #include namespace std { using ::isalnum; //是否字母或数字 using ::isalpha; //是否字母 using ::iscntrl; //是否控制符 using ::isdigit; //是否是数字 using ::isgraph; //是否字母、数字或标点 using ::islower; //是否小写原创 2009-02-25 21:16:00 · 192 阅读 · 0 评论 -
c++类中结构体
类中定义的结构体只是类的属性,或者更准确点说相当于内部类 ,一切操作都的在类内实现,类外不可见~~~~ 一个简单的调用例子:#include using namespace std; class Vector { //public: struct ss { int a; int b; }; ss S; public: Vector() { } friend void add(); //pri原创 2008-12-15 12:17:00 · 705 阅读 · 0 评论 -
学习C++心得与值得一看的书
学习C++心得与值得一看的书 结合一些我的学习经历,希望对于想学C++的人有些帮助. 大家有什么好想法望提出我老师最初是从C语言教起的,用的是潭浩强的>这本书,那时候命令执行都是在CMD里实现,用的编译器是turboc最经常用到的就是 printf cin 对于效率不是很在乎,只要能执行就好了,连warning都忽略转载 2008-12-11 10:55:00 · 347 阅读 · 0 评论 -
算法的时间复杂度计算
定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的“时间复杂性”。 1SjVj9{: tkV[^OeU> 当输入量n逐渐加大时,时间复杂性的极限情形称为算法的“渐近时间复杂性”。 "&SE!3*m`I E&J 我们常用大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。大O表示只是说有上界,由定义如果f(n)=O原创 2009-02-16 18:27:00 · 341 阅读 · 0 评论 -
VC经典书籍之说
1.《C++ Primer》《The C++ Programming Language 》《Thinking in C++》2.《Windows Programming》《MFC Windows程序设计》《深入浅出MFC》3.《C++ STL》《STL源码解析》4.《Inside C++ Object Model》《VC技术内幕第五版》5.《Windows核心编程》6.《Windows网络编程》7转载 2009-02-11 21:57:00 · 545 阅读 · 1 评论 -
如何学习VC++编程
1 vc的用处我感觉下面一些领域比较适合于用vc: 操作系统编程,game,图形设计,corba编程,com编程,网络编程。我谈谈我的体会。我现在在深圳的一家公司从事IP电话网关的开发。通过这个项目,我 才真正体会到VC有多么强大,上百个线程同时工作,数据库并发访问,而且全部软件基 于COM构造,这样高性能的大型软件,只有VC方显出其英雄本色!不过,在国内,有机会 接触这样的大型系统软件的不多。而转载 2009-02-11 21:26:00 · 840 阅读 · 0 评论 -
VC++学习方法及书籍推荐
现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千,很多陌生的出版社,很多陌生的作者,很多陌生的译者,书名也是越来越夸张,什么××天精通××,精通××编程, ××宝典等等,书的印刷质量真的很好,纸张的质量也是今非昔比啊,但书的内容好象却是越来越让人失望,也许是我老了,我的思想我的观念已脱离现实社会,也许是外面的世界变化得太快,我编程数月,出去一走,路已不是原来的路……回家看着书转载 2009-02-11 21:24:00 · 394 阅读 · 0 评论 -
用C++写的对任意个数排序
#include #include using namespace std;template class numtype>class Order{private: int num,j; numtype t; numtype *b;public: void sort(); ~Order() {cout原创 2008-11-17 22:14:00 · 404 阅读 · 0 评论 -
用C++写的一个万年历
#include #include #include using namespace std;class calendar{public: calendar(int y=2008):year(y){} void calendar1(); ~calendar();private: int year; int原创 2008-11-12 17:47:00 · 435 阅读 · 0 评论 -
杨辉三角程序
#include #include using namespace std;void main(){ int a[100][100],i,j,k,n; do{ //控制打印行数 cout"请输入要打印的行数(; cin>>n; if(n原创 2009-01-05 19:36:00 · 313 阅读 · 0 评论 -
宏中"#"和"##"的用法
宏中"#"和"##"的用法 一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include #include using namespace std; #define STR(s) #s #define CONS(a,b) int(a##e##b) int main() { printf(STR(vck)); // 输转载 2009-02-25 21:33:00 · 143 阅读 · 0 评论 -
c++文件中数据操作问题
C++中对文件中数据的操作最常用的就是读到内存中进行计算!一个个要对应好,要确定你读到的数据是正确的,各个段之间要用空格隔开。如文件"student.txt"中的数据:姓名 学号 c++成绩 高数成绩 a 1001 84.5 70 b 1002 70 80.5 c 1003 75.2原创 2008-12-12 15:47:00 · 246 阅读 · 0 评论 -
MFC的程序执行顺序
MFC的程序和C++语言的程序,从执行原理上说,是完全一致的。 抓住这一点,那么对于理解MFC程序的运行机制也就相对于简单了。C++中的main函数就相当于MFC中的WinMain函数。感兴趣的可以利用VC的断点设置自己跟踪下面讲述的各个函数,就明白它的执行顺序了。一、C++语言程序执行步骤在C++语言中,大约的步骤如下:1, 全局变量内存分配 例子如下:#incl原创 2008-12-18 00:50:00 · 353 阅读 · 0 评论 -
C++类对象的拷贝构造函数分析
对于普通类型的对象来说,它们之间的复制是很简单的,例如: 以下是引用片段:int a=100;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 以下是引用片段:#include using namespace std;class CA{ public: CA(int b) {转载 2008-12-23 21:58:00 · 163 阅读 · 0 评论