【C++ 相关】

C++ 比较经典的书籍

Thinking in C++    C++编程思想        C++入门书籍,不多介绍 
http://www.laixp.cn/soft/sort01/sort02/down-12215.html
C++ Primer 5 th    也是一本入门书籍,很经典,初学者多看 
http://www.laixp.cn/soft/sort01/sort02/down-11801.html
http://www.laixp.cn/soft/sort01/sort02/down-11800.html
深入C++对象模型   这本书主要讲解C++一些底层设计原理,比如说一些虚函数表,多态的实现原理、方法,要想再C++上有深入了解,这本书是一本必看书,推荐 
http://www.laixp.cn/soft/sort01/sort02/down-12267.html
C++设计模式    设计模式,很有名的一般书,四人帮写的。现代软件讲究的是可复用,内聚解耦,这本书提供了多种模式供我们选择,是C++必看的一本书 
http://www.laixp.cn/soft/sort01/sort02/down-12331.html
大规模程序设计 大家知道C++程序编译时比较慢的,笔者开发的一个项目,改动一些基础类的话,重新编译要花掉几个小时,这个人工成本是非常大的。那么这 
本讲解的就是如何减少对其他文件的依赖,怎么实现接口与实现的分离,强烈推荐看的一本书 
http://www.laixp.cn/soft/sort01/sort02/down-11229.html
Effevtive_STL   本书是对STL的一些原理和一些使用STL过程中经常放的一些错误进行分析,讲解,很不错的一本书,推荐看 
http://www.laixp.cn/soft/sort01/sort02/down-11235.html
More_Effective_STL 这本书是对Effevtive_STL的补充,不多说 
http://www.laixp.cn/soft/sort01/sort02/down-11244.html
还有几本,我就不多作介绍了,大家可以自己去了解 
Exceptional C++ 中文 http://www.laixp.cn/soft/sort01/sort02/down-12013.html
Accelerated C++  http://www.laixp.cn/soft/sort01/sort02/down-12004.html
高质量C++编程指南   这本书做为很多公司的指导文章,我就不多说啦 
http://www.laixp.cn/soft/sort01/sort02/down-11216.html
改善既有代码的设计 现在软件越来越看重复用的,经常要对自己编写的代码优化优化再优化,要重构 
http://www.laixp.cn/soft/sort01/sort02/down-11214.html
stl源码剖析 学会一个东西最好的方法就是看他源码,这本书就是讲解STL源码的,看过之后相信你对STL有一个大概的了解 
http://www.laixp.cn/soft/sort01/sort02/down-11221.html
数据结构算法与应用-C++语言描述   C++算法的基础教程 
http://www.laixp.cn/soft/sort01/sort02/down-11205.html
C++编程惯用法——高级程序员常用方法和技巧 看书名就知道啦 
http://www.laixp.cn/soft/sort01/sort02/down-11695.html
超越c++标准库——boost程序库导论   boost将成为下一代C++标准库的一部分,现在很多公司都使用这个,功能确实非常强大啊,笔者就非常喜欢结合泛型算法和boost库,用几行优美的代码代替繁琐的代码编程 
http://www.laixp.cn/soft/sort01/sort02/down-11628.html
C++必知必会 本书描述了C++编程和设计中必须掌握但却不易掌握的主题,这些主题涉及的范围较广,包括指针操作模板、泛型编程、异常处理、内存分配、设计模式等。 
http://www.laixp.cn/soft/sort01/sort02/down-11807.html
还有几本书,我就不多作介绍了,大家有兴趣可以自己去了解 
C++多范型设计  http://www.laixp.cn/soft/sort01/sort02/down-12209.html
C++代码设计与重用  http://www.laixp.cn/soft/sort01/sort02/down-12207.html
C++ 设计新思维:范型编程与设计模式之应用 http://www.laixp.cn/soft/sort01/sort02/down-12198.html这本书我第一次看的时候,那个模板的运用让我很震惊 
C++高级程序设计 - 徐惠民 http://www.laixp.cn/soft/sort01/sort02/down-12219.html
还有,我就不贴了,自己选择合适自己的书看吧,祝愿大家取得好的效果 
另附加说明一下:多年的C++编程经验,有一点明白。刚学习C++的朋友,可能不知道该怎么学,学那些东西比较重要。 
我认为在C++实际应用中,1、业务和需求这个重要性排第一位 2、算法、编程风格排第二位 3、设计能力包括设计模式的理解 4、最后才是语法等一些功能 
所以,学习要分清重点,我的建议是看几本经典的C++书籍,看linux源代码,这个我强烈推荐看,看不懂没关系,看多了,对你的编程风格,编程技巧影响很大,终身受益!


====================================================================================

C++ 成长之路 

一、入门:沟通一个观念,手敲代码。
A、《C++程序设计》《C++Primer》等,学习语言基础,手敲所有代码,这是扎马步,提升兴趣、成就感,打下扎实的基础,不再浮躁。
B、《高质量C/C++编程指南》《华为编程规范》等,规范自己的代码,养成对代码的审美观。
C、有步骤有讲解的百例类的书,忘记书带的光盘(把它贴到天花板上),敲所有的例子代码,学会调试,了解VC都能干什么。
D、也可以看看视频,比如孙鑫老师的,看看名家怎么编程,怎么用MSDN,如果你也能自己重新手敲一遍代码,你会让我很佩服。因为视频容易让人浮躁,很难静下心敲代码。
二、入职:沟通一个观念,学会解决问题。
A、MSDN
B、搜索引擎
C、CSDN、VCKBASE
D、codeproject。
如果你知道我在说什么和为什么这么排序,那么恭喜你。
三、积累:总结知识,建立自己的知识库。
A、总结自己遇到的问题,建立自己的知识库和代码库,30秒内能查到。
B、总结自己的代码,建立自己的高质量的复用模块、框架。
四、学习:你选择了编程,那就意味着不断的学习。
A、每日读书(这是我保持了近10年的习惯,近5年的速度为每两个月三本书),一年18本,大概千元左右吧,自己出或公司报销都没关系,值得。
B、扫街。扫CSDN的你需要的版块,扫VCKBASE所有的代码,扫Codeproject上所有你需要的内容,扫过后以后只扫更新。
五、提升:沟通一个观念,大局观和眼界
A、中小规模的开源代码,你会看到框架、高质量的代码、版本管理、测试机制。
B、结合你工作中的需要,分析项目的框架,模块间接口,服务意识,提出自己更好的建议,剩下的事你自己想吧。
六、训练:训练自己辩证思维(好坏都想想),反向思维(别人认为是坏事的,你就想这事是个好事,并举出充分的理由来。别人都说好的,你就想如果哪里做不好,可能就变成坏事),勇气(感觉难的,面对它,困难就是纸老虎),逻辑思维,发散思维。相信我,这些是可以通过简单的训练达到一定的效果。

 

=====================================================================================

C++ Primer 4Th 中文版

Chapter 03

3.1 命名空间的using 声明

3.2 标准库string 类型

3.3 标准库 vector 类型

3.4 迭代器简介

3.5 标准库 bitset 类型

 

    string 和 vector 往往将迭代器用作配套类型(companion type)。这些标准库类型是语言组成部分中更基本的那些数据类型(如数组和指针)的抽象。

    标准库类型bitset, 提供了一种抽象方法来操作位的集合。

    Chapter 4  讨论数组和指针,Chapter 5 讲述内置位操作符。

    Chapter 2 涉及的数值或字符类型都是低级数据类型。C++ 标准库定义了更高级的抽象数据类型(abstract data type)。

    string 类型支持长度可变的字符串,vector 可用于保存一组指定类型的对象。另一种标准库类型提供了更方便和合理有效的语言级的抽象设施,它就是bitset 类。

3.1 命名空间的 using 声明

    using 声明,使用using 声明可以在不需要加前缀namespace_name :: 的情况下访问命名空间中的名字。

 1. 每个名字都需要一个 using 声明

    2. 使用标准库类型的类定义

3.2 标准库string 类型

3.2.1 string 对象的定义和初始化

 


3.2.2 String 对象的读写

// Note: #include and using declarations must be added to compile this code

int main()

{   

     string s;   //empty string

     cin>>s;    //read whitespace-separated string into s

     cout<<s<<endl;   //write s to the output

     return 0;

}

 

 


     1. 读入未知数目的 string 对象

    int main()

{

      string word;

     // read until end-of-file,writing each word to a new line

    while(cin>>word)

         cout<<word<<endl;

     return 0;

}   

 

===============================================================================

成为跨平台的C++

最近看到javaeye 上的坛友,想达到 
“有勇气说自己会c++,标准c++,而且能跨平台” 这样的目标。身边有不少想学习C++的朋友,就这个问题,说说我的理解
跨平台的C++程序员也曾是我的目标,不过多年来,我只有在windows和 unix 下的开发经验,所我的经验来自于这两大平台。

带具体任务进行学习

如果没有具体的任务做为目标,你的学习将没有效率可言,并且知识都本都停留在书面上,过段时间,你又基本上都忘记。
因此在学习C++过程要不断给自
己设定任务。 并且将这个任务不断非富,不断重构
。 
以下我举例来说明:

编写双人对弈的五子棋 ver 1.0

在unix下使用GCC  + MAKE +  VIM (跨平台的编辑器) 
来完成这个任务,熟悉C++的基本语法,学习使有类或者结构来表达领域的概念。在这个期间尽可能的少用库(除非不得已),界面显示是次要问题,在控制台上
显示即可。
达到标准: 五子棋可以双人对弈,源代码有信心给人看, 基本符合代码大全的标准 : )
目的:  GNU下的开发环境,  C++ 程序对 类、指针、基本算法、内存管理问题 的学习。

五子棋 ver 2.0 (重构 ver 1.0)

自己学习模版、STL 以及 Boost  然后来重构之前的 ver 1.0 版本。 尽可能的使用STL, 使用boost  的 
smarty 智能支持来管理内存。
达到标准: 程序代码行数要减少至原来的 50% 以下。
目的: 对泛型抽象及模板技术的初步学习以及熟悉 STL 库和 BOOST 库

五子棋 ver 3.0  (增加对弈结果保存以及复盘的功能)

加上以上两个功能,需要做不少的工作。要考虑各种外部资源不满足的情况。
达到标准: 功能上满足要求, 并且能实现破坏性测试( 存盘文件不存大, 棋局文件内容错误)
目的:     数据保存、对象序列化、  异常、异常安全、外部资源管理的学习

五子棋 ver 4.0  (支持网络对战)

学习网络编译,基于TCP来实现

五子棋 ver 5.0  (支持与电脑对战)

进行算法的学习,提供人工智能能力,并有难度级别

五子棋 ver 6.0  (提供可操作的界面)

可操作的界面,可以是windows 下的, 也可以是linux  还可以考虑与python 结合 学习混合编程。 另外这个只影响界面层的代码。
达到以上6个版本,你已经是一个跨平台的标准C++的程序员,以后完全可以自己来解决C++领域的大部份问题。 另外你的这个作品,对于找工作来说,已是利器,无往而不胜

在学习过程注意几点:
除了版本1.0 和 6.0 外,程序要尽可能的使用标准库,跨平台的库
放弃使用便捷的IDE,  在unix 下   vim + gcc + gdb + make   才是C++开发的主流. 


有选择的阅读
C++ 书藉非常之多, 其它如设计领域、网络编程、多线程多进程编程、界面开发 等资料十在是太多。你无法全部读完,还是有选择的来阅读。 
书一定要区分这书是手册类型的,还是系统理论型
的。
前者在需要时查就可以,后者则需要精读,有了实战后再读。
推荐几本需要精读的书


《深入理解计算机系统》
《C++ 程序设计语言》
《代码大全》
《C++ 语言的设计和演化》
《C++ Templates 中文版》
《unix环境高级编程》

 ============================================================================

C/C++ 头文件 常识

C/C++ 头文件 常用头文件功能查询表 
#include <assert.h> //设定插入点 
#include <ctype.h> //字符处理 
#include <errno.h> //定义错误码 
#include <float.h> //浮点数处理 
#include <fstream.h> //文件输入/输出 
#include <iomanip.h> //参数化输入/输出 
#include <iostream.h> //数据流输入/输出 
#include <limits.h> //定义各种数据类型最值常量 
#include <locale.h> //定义本地化函数 
#include <math.h> //定义数学函数 
#include <stdio.h> //定义输入/输出函数 
#include <stdlib.h> //定义杂项函数及内存分配函数 
#include <string.h> //字符串处理 
#include <strstrea.h> //基于数组的输入/输出 
#include <time.h> //定义关于时间的函数 
#include <wchar.h> //宽字符处理及输入/输出 
#include <wctype.h> //宽字符分类 
// 
标准 C++ (同上的不再注释) 
#include <algorithm> //STL 通用算法 
#include <bitset> //STL 位集容器 
#include <cctype> 
#include <cerrno> 
#include <clocale> 
#include <cmath> 
#include <complex> //复数类 
#include <cstdio> 
#include <cstdlib> 
#include <cstring> 
#include <ctime> 
#include <deque> //STL 双端队列容器 
#include <exception> //异常处理类 
#include <fstream> 
#include <functional> //STL 定义运算函数(代替运算符) 
#include <limits> 
#include <list> //STL 线性列表容器 
#include <map> //STL 映射容器 
#include <iomanip> 
#include <ios> //基本输入/输出支持 
#include <iosfwd> //输入/输出系统使用的前置声明 
#include <iostream> 
#include <istream> //基本输入流 
#include <ostream> //基本输出流 
#include <queue> //STL 队列容器 
#include <set> //STL 集合容器 
#include <sstream> //基于字符串的流 
#include <stack> //STL 堆栈容器 
#include <stdexcept> //标准异常类 
#include <streambuf> //底层输入/输出支持 
#include <string> //字符串类 
#include <utility> //STL 通用模板类 
#include <vector> //STL 动态数组容器 
#include <cwchar> 
#include <cwctype> 
using namespace std; 
// 
C99 增加 
#include <complex.h> //复数处理 

头文件最主要的功能是起到声明作用,比如说,在某个类中,你要用到如下头文件: 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <strstrea.h> 
你就可以自定义一个头文件,然后把这些头文件放到自定义的头文件中,然后在那个类开头包含自定义的头文件就行了,不需要再写以上头文件,这样就使代码显得简练易懂.

c++里面的类,函数,变量都有声明和定义的区别 
在用到一个类或函数或变量之前,必须进行声明,但可以在之后定义。 
比如 
//声明go 
int go(); 
int main() { 
go(); 

int go() { 
cout << "go"; 

如果没有之前的go的声明,在main中调用是会出错的 
但把所有的声明都放在文件的开头会比较麻烦,而且,如果go这个函数在其他的文件中要用到时,在其他的文件里面也要对go()进行声明 
//2.cpp 
//声明go 
int go(); 
int haha() { 
go(); 

这样在文件很多时容易出错。 
所以,我们就把所有的声明,如go的声明放在一个文件中, 比如1.h. 
这样,在2.cpp里面,只要#include "1.h",就可以直接调用go了 
如果一个文件,如1.cpp里面有30几个函数,我们把这些函数的声明都放在1.h里面,别的文件,如2.cpp要用这些函数,只要include一下1.h就行了,十分方便 
总之 
头文件里面放的就是各种各样的声明

 

【C++著名程序库的比较和学习经验】

C++著名程序库的比较和学习经验 

C++著名程序库的比较和学习经验(转自校内,虽然不是搞C++的,但了解一些基础的还是很有必要)1、C++各大有名库的介绍——C++标准库 
2、C++各大有名库的介绍——准标准库Boost 
3、C++各大有名库的介绍——GUI 
4、C++各大有名库的介绍——网络通信 
5、C++各大有名库的介绍——XML 
6、C++各大有名库的介绍——科学计算 
7、C++各大有名库的介绍——游戏开发 
8、C++各大有名库的介绍——线程 
9、C++各大有名库的介绍——序列化 
10、C++各大有名库的介绍——字符串 
11、C++各大有名库的介绍——综合 
12、C++各大有名库的介绍——其他库 
13、C++名人的网站 
在 C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重 量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比 较著名的大型库。 
1、C++各大有名库的介绍——C++标准库 标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。 
1.1、Dinkumware C++ Library
参考站点:http://www.dinkumware.com/ 
P.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobb's程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其 C/C++的产品中采用Dinkumware的库。
1.2、RogueWave Standard C++ Library
参考站点:http://www.roguewave.com/ 
这个库在Borland C++ Builder的早期版本中曾经被采用,后来被其他的库给替换了。笔者不推荐使用。
1.3、SGI STL
参考站点:http://www.roguewave.com/ 
SGI公司的C++标准模版库。
1.4、STLport
参考站点:http://www.stlport.org/ 
SGI STL库的跨平台可移植版本。
2、C++各大有名库的介绍——准标准库Boost 
Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。 Boost中比较有名气的有这么几个库:
2.1 Regex  正则表达式库
2.2 Spirit   LL parser framework,用C++代码直接表达EBNF
2.3 Graph  图组件和算法
2.4 Lambda  在调用的地方定义短小匿名的函数对象,很实用的functional功能
2.5 concept check   检查泛型编程中的concept
2.6 Mpl   用模板实现的元编程框架
2.7 Thread   可移植的C++多线程库
2.8 Python   把C++类和函数映射到Python之中
2.9 Pool    内存池管理
2.10 smart_ptr   5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:
Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。中文版见笔者在《Dr.Dobb's Journal软件研发杂志》第7辑上的译文。
Boost总体来说是实用价值很高,质量很高的库。并且由于其对跨平台的强调,对标准C++的强调,是编写平台无关,现代C++的开发者必备的 工具。但是Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。并且很多Boost中的库功能堪称对语言功能的扩展,其构造用尽精巧的手 法,不要贸然的花费时间研读。Boost另外一面,比如Graph这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品 代码中多多利用。
参考站点:http://www.boost.org 
3、C++各大有名库的介绍——GUI 
在众多C++的库中,GUI部分的库算是比较繁荣,也比较引人注目的。在实际开发中,GUI库的选择也是非常重要的一件事情,下面我们综述一下可选择的GUI库,各自的特点以及相关工具的支持。 3.1、MFC
大名鼎鼎的微软基础类库(Microsoft Foundation Class)。大凡学过VC++的人都应该知道这个库。虽然从技术角度讲,MFC是不大漂亮的,但是它构建于Windows API 之上,能够使程序员的工作更容易,编程效率高,减少了大量在建立 Windows 程序时必须编写的代码,同时它还提供了所有一般 C++ 编程的优点,例如继承和封装。MFC 编写的程序在各个版本的Windows操作系统上是可移植的,例如,在Windows 3.1下编写的代码可以很容易地移植到 Windows NT 或 Windows 95 上。但是在最近发展以及官方支持上日渐势微。
3.2、QT
参考网站:http://www.trolltech.com 
Qt是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功 能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序 的基础。Qt也是流行的Linux桌面环境KDE 的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。[wangxinus注:QT目前已经是Nokia旗下的产品,原官方网站已经失效,目前为http://qt.nokia.com.2009年初发布的Qt4.5版本开始使用LGPL协议,诺基亚希望以此来吸引更多的开发人员使用Qt库]
3.3、WxWindows
参考网站:http://www.wxwindows.org 
跨平台的GUI库。因为其类层次极像MFC,所以有文章介绍从MFC到WxWindows的代码移植以实现跨平台的功能。通过多年的开发也是一个日趋完善的GUI库,支持同样不弱于前面两个库。并且是完全开放源代码的。新近的C++ Builder X的GUI设计器就是基于这个库的。[wangxinus注:迫于微软的施压,已经由WxWindows更名为wxWidgets]
3.4、Fox
参考网站:http://www.fox-toolkit.org/ 
开放源代码的GUI库。作者从自己亲身的开发经验中得出了一个理想的GUI库应该是什么样子的感受出发,从而开始了对这个库的开发。有兴趣的可以尝试一下。
3.5、WTL
基于ATL的一个库。因为使用了大量ATL的轻量级手法,模板等技术,在代码尺寸,以及速度优化方面做得非常到位。主要面向的使用群体是开发COM轻量级供网络下载的可视化控件的开发者。
3.6、GTK
参考网站:http://gtkmm.sourceforge.net/ 
GTK是一个大名鼎鼎的C的开源GUI库。在Linux世界中有Gnome这样的杀手应用。而Qt就是这个库的C++封装版本。[wangxinus注:“Qt 就是这个库的C++封装版本”是错误的。Qt早于GTK,最初Qt由于协议的原因引起社区的不满,另外开发了一个基于C语言的GTK库,后面的扩展版本为 GTK+。GTK+的Gnome和Qt的KDE是目前linux桌面的两大阵营,曾有水火不容之势。目前双方都以及开源社区的精神,已经和解。]
4、C++各大有名库的介绍——网络通信 
4.1、ACE
参考网站:http://www.cs.wustl.edu/~schmidt/ACE.html 
C++库的代表,超重量级的网络通信开发框架。ACE自适配通信环境(Adaptive Communication Environment)是可以自由使用、开放源代码的面向对象框架,在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ 包装外观(Wrapper Facade)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。
4.2、StreamModule
参考网站:http://www.omnifarious.org/StrMod 
设计用于简化编写分布式程序的库。尝试着使得编写处理异步行为的程序更容易,而不是用同步的外壳包起异步的本质。
4.3、SimpleSocket
参考网站:http://home.hetnet.nl/~lcbokkers/simsock.htm 
这个类库让编写基于socket的客户/服务器程序更加容易。
4.4、A Stream Socket API for C++
参考网站:http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.html 
又一个对Socket的封装库。
5、C++各大有名库的介绍——XML 
5.1、Xerces
参考网站:http://xml.apache.org/xerces-c/ 
Xerces-C++ 是一个非常健壮的XML解析器,它提供了验证,以及SAX和DOM API。XML验证在文档类型定义(Document Type Definition,DTD)方面有很好的支持,并且在2001年12月增加了支持W3C XMLSchema 的基本完整的开放标准。
5.2、XMLBooster
参考网站:http://www.xmlbooster.com/ 
这个库通过产生特制的parser的办法极大的提高了XML解析的速度,并且能够产生相应的GUI程序来修改这个parser。在DOM和SAX两大主流XML解析办法之外提供了另外一个可行的解决方案。
5.3、Pull Parser
参考网站:http://www.extreme.indiana.edu/xgws/xsoap/xpp 
这个库采用pull方法的parser。在每个SAX的parser底层都有一个pull的parser,这个xpp把这层暴露出来直接给大家使用。在要充分考虑速度的时候值得尝试。
5.4、Xalan
参考网站:http://xml.apache.org/xalan-c/ 
Xalan是一个用于把XML文档转换为HTML,纯文本或者其他XML类型文档的XSLT处理器。
5.5、CMarkup
参考网站:http://www.firstobject.com/xml.htm 
这是一种使用EDOM的XML解析器。在很多思路上面非常灵活实用。值得大家在DOM和SAX之外寻求一点灵感。
5.6、libxml++
http://libxmlplusplus.sourceforge.net/ 
libxml++是对著名的libxml XML解析器的C++封装版本。
5.7. TinyXML [wangxinus注:一个非常小巧的XML解析库,基于DOM的。]
6、C++各大有名库的介绍——科学计算 
6.1、Blitz++
参考网站:http://www.oonumerics.org/blitz 
Blitz++ 是一个高效率的数值计算函数库,它的设计目的是希望建立一套既具像C++ 一样方便,同时又比Fortran速度更快的数值计算环境。通常,用C++所写出的数值程序,比 Fortran慢20%左右,因此Blitz++正是要改掉这个缺点。方法是利用C++的template技术,程序执行甚至可以比Fortran更快。
Blitz++目前仍在发展中,对于常见的SVD,FFTs,QMRES等常见的线性代数方法并不提供,不过使用者可以很容易地利用Blitz++所提供的函数来构建。
6.2、POOMA
参考网站:http://www.codesourcery.com/pooma/pooma 
POOMA是一个免费的高性能的C++库,用于处理并行式科学计算。POOMA的面向对象设计方便了快速的程序开发,对并行机器进行了优化以达到最高的效率,方便在工业和研究环境中使用。
6.3、MTL
参考网站:http://www.osl.iu.edu/research/mtl 
Matrix Template Library(MTL)是一个高性能的泛型组件库,提供了各种格式矩阵的大量线性代数方面的功能。在某些应用使用高性能编译器的情况下,比如Intel的编译器,从产生的汇编代码可以看出其与手写几乎没有两样的效能。
6.4、CGAL
参考网站:www.cgal.org 
Computational Geometry Algorithms Library的目的是把在计算几何方面的大部分重要的解决方案和方法以C++库的形式提供给工业和学术界的用户。
7、C++各大有名库的介绍——游戏开发 
7.1、Audio/Video 3D C++ Programming Library
参考网站:http://www.galacticasoftware.com/products/av/ 
AV3D是一个跨平台,高性能的C++库。主要的特性是提供3D图形,声效支持(SB,以及S3M),控制接口(键盘,鼠标和遥感),XMS。
7.2、KlayGE
参考网站:http://home.g365.net/enginedev/ 
国内游戏开发高手自己用C++开发的游戏引擎。KlayGE是一个开放源代码、跨平台的游戏引擎,并使用Python作脚本语言。KlayGE在LGPL协议下发行。感谢龚敏敏先生为中国游戏开发事业所做出的贡献。
[wangxinus注:这个库国人了解很少,百度百科的KlayGE词条还是本人创建的。一个人开发一个游戏引擎库,是在让笔者汗颜,对作者表示钦佩!]
7.3、OGRE
参考网站:http://www.ogre3d.org 
OGRE(面向对象的图形渲染引擎)是用C++开发的,使用灵活的面向对象3D引擎。它的目的是让开发者能更方便和直接地开发基于3D硬件设备 的应用程序或游戏。引擎中的类库对更底层的系统库(如:Direct3D和OpenGL)的全部使用细节进行了抽象,并提供了基于现实世界对象的接口和其 它类。
8、C++各大有名库的介绍——线程 
8.1、C++ Threads
参考网站:http://threads.sourceforge.net/ 
这个库的目标是给程序员提供易于使用的类,这些类被继承以提供在Linux环境中很难看到的大量的线程方面的功能。
8.2、ZThreads
参考网站:http://zthread.sourceforge.net/ 
一个先进的面向对象,跨平台的C++线程和同步库。
9、C++各大有名库的介绍——序列化 
9.1、s11n
参考网站:http://s11n.net/ 
一个基于STL的C++库,用于序列化POD,STL容器以及用户定义的类型。
9.2、Simple XML Persistence Library
参考网站:http://sxp.sourceforge.net/ 
这是一个把对象序列化为XML的轻量级的C++库。
10、C++各大有名库的介绍——字符串 
10.1、C++ Str Library
参考网站:http://www.utilitycode.com/str/ 
操作字符串和字符的库,支持Windows和支持gcc的多种平台。提供高度优化的代码,并且支持多线程环境和Unicode,同时还有正则表达式的支持。
10.2、Common Text Transformation Library
参考网站:http://cttl.sourceforge.net/ 
这是一个解析和修改STL字符串的库。CTTL substring类可以用来比较,插入,替换以及用EBNF的语法进行解析。
10.3、GRETA
参考网站:http://research.microsoft.com/projects/greta/ 
这是由微软研究院的研究人员开发的处理正则表达式的库。在小型匹配的情况下有非常优秀的表现。
11、C++各大有名库的介绍——综合 
11.1、P::Classes
参考网站:http://pclasses.com/ 
一个高度可移植的C++应用程序框架。当前关注类型和线程安全的signal/slot机制,i/o系统包括基于插件的网络协议透明的i/o架构,基于插件的应用程序消息日志框架,访问sql数据库的类等等。
11.2、ACDK - Artefaktur Component Development Kit
参考网站:http://acdk.sourceforge.net/ 
这是一个平台无关的C++组件框架,类似于Java或者.NET中的框架(反射机制,线程,Unicode,废料收集,I/O,网络,实用工具,XML,等等),以及对Java, Perl, Python, TCL, Lisp, COM 和 CORBA的集成。
11.3、dlib C++ library
参考网站:http://www.cis.ohio-state.edu/~kingd/dlib/ 
各种各样的类的一个综合。大整数,Socket,线程,GUI,容器类,以及浏览目录的API等等。
11.4、Chilkat C++ Libraries
参考网站:http://www.chilkatsoft.com/cpp_libraries.asp 
这是提供zip,e-mail,编码,S/MIME,XML等方面的库。
11.5、C++ Portable Types Library (PTypes)
参考网站:http://www.melikyan.com/ptypes/ 
这是STL的比较简单的替代品,以及可移植的多线程和网络库。
11.6、LFC
参考网站:http://lfc.sourceforge.net/ 
哦,这又是一个尝试提供一切的C++库
12、C++各大有名库的介绍——其他库 
12.1、Loki
参考网站:http://www.moderncppdesign.com/ 
哦,你可能抱怨我早该和Boost一起介绍它,一个实验性质的库。作者在loki中把C++模板的功能发挥到了极致。并且尝试把类似设计模式这样思想层面的东西通过库来提供。同时还提供了智能指针这样比较实用的功能。
12.2、ATL
ATL(Active Template Library)是一组小巧、高效、灵活的类,这些类为创建可互操作的COM组件提供了基本的设施。
12.3、FC++: The Functional C++ Library
这个库提供了一些函数式语言中才有的要素。属于用库来扩充语言的一个代表作。如果想要在OOP之外寻找另一分的乐趣,可以去看看函数式程序设计的世界。大师Peter Norvig在 “Teach Yourself Programming in Ten Years”一文中就将函数式语言列为至少应当学习的6类编程语言之一。
12.4、FACT!
参考网站:http://www.kfa-juelich.de/zam/FACT/start/index.html 
另外一个实现函数式语言特性的库
12.5、Crypto++
提供处理密码,消息验证,单向hash,公匙加密系统等功能的免费库。
还有很多非常激动人心或者是极其实用的C++库,限于我们的水平以及文章的篇幅不能包括进来。在对于这些已经包含近来的库的介绍中,由于并不是每一个我们都使用过,所以难免有偏颇之处,请读者见谅。
13、C++名人的网站 
正如我们可以通过计算机历史上的重要人物了解计算机史的发展,C++相关人物的网站也可以使我们得到最有价值的参考与借鉴,下面的人物我们认为没 有介绍的必要,只因下面的人物在C++领域的地位众所周知,我们只将相关的资源进行罗列以供读者学习,他们有的工作于贝尔实验室,有的工作于知名编译器厂 商,有的在不断推进语言的标准化,有的为读者撰写了多部千古奇作…… 
1、Bjarne Stroustrup
http://www.research.att.com/~bs/ 
2、Stanley B. Lippman
http://blogs.msdn.com/slippman/ (中文版)
http://www.zengyihome.net/slippman/index.htm 
3、Scott Meyers
http://www.aristeia.com/ 
4、David Musser
http://www.cs.rpi.edu/~musser/ 
5、Bruce Eckel
http://www.bruceeckel.com 
http://blog.csdn.net/beckel Bruce Eckel 博客中文版
6、Nicolai M. Josuttis
http://www.josuttis.com/ 
7、Herb Sutter
http://www.gotw.ca/ 
http://blog.csdn.net/hsutter/ Herb Sutter 中文博客
8、Andrei Alexandrescu

http://www.moderncppdesign.com

 

 

===============================================================

C++的类和结构体的不同点 

C++是面向对象的语言,中心就是对象,而类就是对象的抽象。可以把属性和方法都写在类里。

C语言是结构化语言,中心是方法,结构体只包含属性而不会有方法。

C++类和结构体概念基本一致,区别是C++中类成员默认访问是private,结构体是public

C中结构体就是结构体,只有数据成员,不能有成员函数。

首先,要确认的一点是C中的struct通过函数指针来调用函数,但函数指针不同于成员函数。之所以有这个问题,是因为C++中的struct已经基本具备“类”的功能,可以有成员函数,且struct具有继承属性。

c++中struct与class除了关键字不同之外,更重要的是成员控制权限的差异,目前了解的仅此而已。

代码就是王道:

(成员变量的默认访问权限不同——struct默认为public,而class默认为private)

#include<iostream>

#include<stdio.h>

#include<malloc.h>

#include<string.h>

using namespace std;

enum Breed {SHIZIGOU,JUANMAOGOU,MUYANGQUAN};

struct Mamal

{

private: int age;

public :

void speak()

{cout<<"speaking"<<endl;}

void sleep()

{cout<<"sleeping"<<endl;}

Mamal():age(4) {}

~Mamal(){}

};

struct Dog:public Mamal

{

int a;

private: Breed dogbreed;

public :

Dog():dogbreed(SHIZIGOU),a(3){}

~Dog(){}

void getdogbreed()

{cout<<dogbreed<<endl;}

};

int main()

{

   Dog dd;

   dd.speak();         //访问基类的成员函数

   dd.getdogbreed();           //必须通过公有接口访问私有成员

   cout<<dd.a<<endl;     //成员a

.................

}

=============================================

 关于隐含指针---- this 指针

 

1) this 指针是一个隐含于每一个类的成员函数或构造函数或析构函数中的特殊指针。它用于指向正在被成员函数或构造函数或析构函数操作的对象。
2) this指针指向的是一个类的对象,而且指向的是当前实例化的对象。
3) 当定义一个类的对象(或叫实例),系统(编译器)将该对象的地址赋给this 指针。
4) 每次成员函数(包括构造函数、析构函数)被调用时,都会给调用它的对象传递一个指针,这个指针的名字叫做 this 指针。
5) this 指针对于我们来说是不可见的,因为它自动地即隐式地传递。
6) this 指针的句法 类似其他指针的句法,唯一的不同点就是在于 this 指针不需要声明,因为它能有操作系统自动地生成。它仅仅从类的成员函数(包括构造函数、析构函数)中返回类成员的内存地址。

//~~~~~~~~~~~~~~~~~华丽分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

下面是两个示例:
#include <iostream>
using namespace std;

class Point
{
   public:
      Point(int xx = 0, int yy = 0) { X = xx ;  Y = yy ;}
//   Point ( int xx = 0, int yy = 0) { this -> X = xx ;  this -> Y = yy ;}
      int GetX() { return  X ; }
      int GetY() { return Y ; }
  private:
       int X , Y ;
};

int main()
{
    Point A(4 , 5);
    Point *p1;
    p1 = & A;
    cout << p1 -> GetX() << endl;
    cout << A.GetX() << endl;
}

//~~~~~~~~~~~~~~~~~华丽分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include <iostream>
using namespace std;

class Base
{
  public:
    Base *pointer;
  public:
    Base()
  {
    pointer = this;
  }
  virtual void output()  {  cout<<"output Base!"<< endl ; }
 //  void output() { cout << "output Base! "<< endl; }
};

class Derive:public Base
{
public:
 void output()
 {
    cout<<"output derive!"<<endl;
 }
};

void main()
{
 Base Base_variable;   
 Base_variable.pointer->output(); 

 Derive Derive_variable;  
 Derive_variable.pointer->output();  
}
this指针指向的是一个类的对象,而且指向的是当前实例化的对象。我们先看看main()函数中,我们总共构造了两个对象,一个是基类的对象Base_variable,一个是派生类的对象Derive_variable。我们再看看基类中的构造函数Base()什么时候会被调用呢?很明显,构造一个基类对象和构造一个派生类对象时都会调用。 

在我们构造基类对象Base_variable时,this指针指向这个对象,所以pointer也会指向这个对象,所以调用的output()函数是基类中的output()函数。而我们构造派生类对象Derive_variable时,this指针指向这个对象,所以调用的output()函数是派生类中的output()函数。

 //~~~~~~~~~~~~~~~~~华丽分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 下面是百度百科的内容 (更新于2012-06-07日)

1) this指针的用处:
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。   

例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),this帮助完成了这一转换 。
2) this指针的使用:
一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时使用this指针,如this->n = n (不能写成n = n)。

3) this指针程序示例:
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。根据以下程序来说明this指针  

#include<iostream>   
using namespace std;   

class Point   

 private:   
     int x, y ;   
 public:   
     Point(int a, int b) { x=a; y=b;}   
     void MovePoint( int a, int b){ x+=a; y+=b;}   
     void print(){ cout<<"x="<<x<<"y="<<y<<endl;}   
};   

void main( )   
{   
  Point point1( 10,10);   
  point1.MovePoint(2,2);   
  point1.print( );   
}   

当对象point1调用MovePoint(2,2)函数时,即将point1对象的地址传递给了this指针。MovePoint函数的原型应该是 void MovePoint( Point *this, int a, int b);第一个参数是指向该类对象的一个指针,我们在定义成员函数时没看见是因为这个参数在类中是隐含的。这样point1的地址传递给了this,所以在MovePoint函数中便显式的写成:void MovePoint(int a, int b) { this->x +=a; this-> y+= b;} 即可以知道,point1调用该函数后,也就是point1的数据成员被调用并更新了值。

4) 关于this指针的一个经典回答:
当你进入一个房子后,   
你可以看见桌子、椅子、地板等,  
但是房子你是看不到全貌了。  
对于一个类的实例来说,  
你可以看到它的成员函数、成员变量,  
但是实例本身呢?  
this是一个指针,它时时刻刻指向你这个实例本身。

============================================================

 

C++ Primer 4Th 中文版 P769 

Chapter 01 快速入门

Chapter 02 变量和基本类型 

Chapter 03 标准库类型

Chapter 04 数组和指针

Chapter 05 表达式

Chapter 06 语句

Chapter 07 函数

Chapter 08 标准IO库

Chapter 09 顺序容器

Chapter 10 关联容器

Chapter 11 泛型算法

Chapter 12 类

Chapter 13 复制控制

Chapter 14 重载操作符与转换

Chapter 15 面向对象编程

Chapter 16 模板与泛型编程

Chapter 17 用于大型程序的工具

Chapter 18 特殊工具与技术

========================================

http://www.awprofessional.com/cpp_primer下载源代码

Source Code 

Download the source code files related to this book.

Source code(packaged for Windows systems using Microsoft Visual Studio.NET). Please note, the code requires Microsoft compiler Version 7.0 or later.

Source code(packaged for Unix and similar systems, tar file compressed with gzip). Please note the code was compiled using g++ version 3.2 or later.

 

 

Visual Studio 2010 Ultimate Version 10.0.30319.1 RTMRel   2010 Microsoft Corporation All rights reserved.

Microsoft .Net Framework Version 4.0.30319 RTMRel    2010 Microsoft Corporation All rights reserved.

 

 

 

 http://www.geekpedia.com

====================================

1.C++  程序设计语言(特别版) 作者 : [美] Bjarne Stroustrup 贝尔实验室   出版社 : 机械工业出版社

2.C++语言的设计和演化  作者 : [美] Bjarne Stroustrup     出版社 : 机械工业出版社 

3.C++ Templates  中文版  作者 : David Vandevoorde/Nicolai M.Josuttis  出版社 : 人民邮电出版社

4.C++设计新思维(泛型编程与设计模式之应用)作者 : (美)Andrei Alexandrescu  出版社 : 华中科技大学出版社

5.C++ 编程规范 作者 : 萨特,亚历山德雷斯库 著,刘基诚 译   出版社 : 人民邮电出版社

6.深入理解计算机系统(修订版)作者 : Randal E.Bryant/David O'Hallaron

7. 代码大全(第2版)作者 : [美] 史蒂夫·迈克康奈尔
8.UNIX 环境高级编程(第2版) 作者 : W.Richard Stevens/Stephen A.Rago

9. Effective C++ 改善程序与设计的55个具体做法(中文 3th) 作者 : Scott Meyers

======================================================================

C/C++ 之旅程

Windows C 程序设计入门与提高

http://download.chinaitlab.com/program/files/13246.html

单片机C语言入门

http://download.chinaitlab.com/program/files/12907.html

C++ 入门基础教程

http://download.chinaitlab.com/program/files/7617.html

C语言常用算法源代码

http://download.chinaitlab.com/program/files/12893.html

C常用算法程序集

http://download.chinaitlab.com/program/files/6225.html

C++ 语言命令详解

http://download.chinaitlab.com/program/files/4556.html

C语言编程要点

http://download.chinaitlab.com/program/files/11823.html

C语言编程基础

http://download.chinaitlab.com/program/files/11074.html

Borland c++使用手册

http://download.chinaitlab.com/program/files/4553.html

C语言数值算法程序大全(第二版)

http://download.chinaitlab.com/program/files/9247.html

Borland c++4.0安装与使用

http://download.chinaitlab.com/program/files/4546.html

C++ Builder 5.0经典入门

http://download.chinaitlab.com/program/files/4438.html

非C程序员C++入门自学教程

http://download.chinaitlab.com/program/files/3924.html

C语言常用函数手册

http://download.chinaitlab.com/program/files/1818.html

C++标准程序库自修教程与参考手册

http://download.chinaitlab.com/program/files/12644.html

C/C++指令字典

http://download.chinaitlab.com/program/files/13237.html

C语言图形函数介绍

http://download.chinaitlab.com/program/files/11643.html

C语言数值计算初步

http://download.chinaitlab.com/program/files/11640.html

C++Builder基础进阶

http://download.chinaitlab.com/program/files/6316.html

C++ 设计新思维

http://download.chinaitlab.com/program/files/6037.html

C++Builder英文帮助

http://download.chinaitlab.com/program/files/6315.html

C语言初学者入门讲座

http://download.chinaitlab.com/program/files/11641.html

C++完全参考手册

http://download.chinaitlab.com/program/files/9845.html

C游戏编程从入门到精通

http://download.chinaitlab.com/program/files/9253.html

《C++Builder学习大全》中文版

http://download.chinaitlab.com/program/files/2141.html

C++ Builder编程研究文档

http://download.chinaitlab.com/program/files/12888.html

C常用函数

http://download.chinaitlab.com/program/files/3867.html

C++程序调试实用手册

http://download.chinaitlab.com/program/files/6131.html

Borland c++4.0从入门到精通

http://download.chinaitlab.com/program/files/4592.html

实用教程
经典C语言教程

http://download.chinaitlab.com/program/files/12625.html

C++捷径教程(第三版)

http://download.chinaitlab.com/program/files/12591.html

Borland c++实用教材

http://download.chinaitlab.com/program/files/4552.html

嵌入式系统中C的开发

http://download.chinaitlab.com/program/files/6027.html

C++上机实践指导教程(第三版)

http://download.chinaitlab.com/program/files/11635.html

C++程序设计语言题解

http://download.chinaitlab.com/program/files/9846.html

C++大学教程(第二版)

http://download.chinaitlab.com/program/files/8918.html

C++ BUILDER 实用培训教程

http://download.chinaitlab.com/program/files/3182.html

Borland c++程序设计教程

http://download.chinaitlab.com/program/files/4549.html

C++Builder自学培训教程

http://download.chinaitlab.com/program/files/6317.html

C++程序设计培训教程

http://download.chinaitlab.com/program/files/6339.html

创世纪的C++ Builder教程

http://download.chinaitlab.com/program/files/6175.html

C++傻瓜教程

http://download.chinaitlab.com/program/files/12647.html

C++编程金典(第三版)

http://download.chinaitlab.com/program/files/12588.html

C高级实用程序设计

http://download.chinaitlab.com/program/files/13238.html

精通C++ Builder 5程序设计高级教程

http://download.chinaitlab.com/program/files/10437.html

C++程序设计语言经典题与实验指导

http://download.chinaitlab.com/program/files/9256.html

C++程序设计教程实验书

http://download.chinaitlab.com/program/files/8917.html

C++面向对象到窗口程序设计

http://download.chinaitlab.com/program/files/10440.html

C++大学基础教程

http://download.chinaitlab.com/program/files/11283.html

C语言核心编程

http://download.chinaitlab.com/program/files/9251.html

Borland c++4.0程序设计

http://download.chinaitlab.com/program/files/4547.html

嵌入式系统的C程序设计

http://download.chinaitlab.com/program/files/11050.html

经典C教程

http://download.chinaitlab.com/program/files/10922.html

C++ 面向对象多线程编程

http://download.chinaitlab.com/program/files/6007.html

Borland c++深入编程

http://download.chinaitlab.com/program/files/4551.html

实用C语言详解

http://download.chinaitlab.com/program/files/3274.html

编程实例
C语言程序设计题典

http://download.chinaitlab.com/program/files/11073.html

C++实例教程

http://download.chinaitlab.com/program/files/11637.html

C++30天极限教程

http://download.chinaitlab.com/program/files/11632.html

C++Builder程序设计范例

http://download.chinaitlab.com/program/files/12892.html

经典编程900例(C语言)

http://download.chinaitlab.com/program/files/7972.html

C语言程序基础及应用实例

http://download.chinaitlab.com/program/files/10456.html

C++编程实例详解

http://download.chinaitlab.com/program/files/6988.html

一个月挑战C++

http://download.chinaitlab.com/program/files/13236.html

C++ Builder网络开发实例

http://download.chinaitlab.com/program/files/12891.html

C语言趣味程序百例精解

http://download.chinaitlab.com/program/files/9249.html

自学C++半月通

http://download.chinaitlab.com/program/files/9232.html

C语言学习300例

http://download.chinaitlab.com/program/files/10458.html

C++实践之路

http://download.chinaitlab.com/program/files/6040.html

Borland c++应用篇

http://download.chinaitlab.com/program/files/4554.html

C++Builder6.0界面实例开发

http://download.chinaitlab.com/program/files/12643.html

21天学通C语言(第六版)

http://download.chinaitlab.com/program/files/11908.html

边用边学C语言

http://download.chinaitlab.com/program/files/11654.html

C语言完美演绎

http://download.chinaitlab.com/program/files/10457.html

设计60系列C++游戏

http://download.chinaitlab.com/program/files/10436.html

C程序100例

http://download.chinaitlab.com/program/files/10200.html
C++物件模型

http://download.chinaitlab.com/program/files/10018.html

C++ Builder 5编程实例与技巧

http://download.chinaitlab.com/program/files/4439.html

C语言程序设计及应用实例

http://download.chinaitlab.com/program/files/3241.html

Borland C++ Builder6开发人员

http://download.chinaitlab.com/program/files/12889.html

Borland C++ 高级开发实践

http://download.chinaitlab.com/program/files/10553.html

经验技巧
C++编码规范与指导

http://download.chinaitlab.com/program/files/9258.html

C++核心编程技术

http://download.chinaitlab.com/program/files/12645.html

C++程序设计陷阱

http://download.chinaitlab.com/program/files/12589.html

C数值算法程序大全

http://download.chinaitlab.com/program/files/11642.html

C++编程-数据结构与程序设计方法

http://download.chinaitlab.com/program/files/9257.html

C和C++代码精粹

http://download.chinaitlab.com/program/files/11910.html

C高级编程技术

http://download.chinaitlab.com/program/files/10462.html

C++语言教程大全

http://download.chinaitlab.com/program/files/9255.html

C++Builder核心program

http://download.chinaitlab.com/program/files/6318.html

C语言常见问题集

http://download.chinaitlab.com/program/files/13239.html

C++ Builder 3 核心编程技术

http://download.chinaitlab.com/program/files/4973.html

Borland C++程序设计技术

http://download.chinaitlab.com/program/files/4972.html

C语言高级实用编程技巧

http://download.chinaitlab.com/program/files/4593.html

用C实现面向对象

http://download.chinaitlab.com/program/files/7566.html

C专家编程

http://download.chinaitlab.com/program/files/12717.html

C程序设计与应用

http://download.chinaitlab.com/program/files/11638.html

C++数据结构

http://download.chinaitlab.com/program/files/9672.html

用C++开发Web商用程序

http://download.chinaitlab.com/program/files/6975.html

C&C++深层探索

http://download.chinaitlab.com/program/files/6036.html

C++ 和面向对象的数值计算

http://download.chinaitlab.com/program/files/6006.html

C++代码设计与重用

http://download.chinaitlab.com/program/files/5980.html

C++程序员JAVA编程

http://download.chinaitlab.com/program/files/4557.html

Borland c++宝典

http://download.chinaitlab.com/program/files/4548.html

C语言最新编程技巧200例

http://download.chinaitlab.com/program/files/3861.html

C++ Builder高级开发人员技术指南

http://download.chinaitlab.com/program/files/12890.html

C++语言学习经验集合

http://download.chinaitlab.com/program/files/12770.html

C语言编程宝典大全

http://download.chinaitlab.com/program/files/10463.html

用C语言设计屏幕界面技术

http://download.chinaitlab.com/program/files/9233.html

Turboc库函数源程序与参考大全

http://download.chinaitlab.com/program/files/9245.html

C++ Builder 5 开发人员指南

http://download.chinaitlab.com/program/files/6200.html

C和C++代码锦囊

http://download.chinaitlab.com/program/files/12590.html

C++ 内存管理算法和实现

http://download.chinaitlab.com/program/files/11631.html

C++程序设计实验指导(钱能)

http://download.chinaitlab.com/program/files/10916.html

C语言学习和精华文摘

http://download.chinaitlab.com/program/files/10459.html

标准C++宝典

http://download.chinaitlab.com/program/files/10438.html

C_C++深层探索

http://download.chinaitlab.com/program/files/6989.html

Borland c++库函数详解

http://download.chinaitlab.com/program/files/4550.html

C++和面向对象的数值计算

http://download.chinaitlab.com/program/files/6987.html

高质量C、C++编程指南

http://download.chinaitlab.com/program/files/3792.html

 ===============================================================

C++著名程序库的比较和学习经验


C++著名程序库的比较和学习经验(转自校内,虽然不是搞C++的,但了解一些基础的还是很有必要)1、C++各大有名库的介绍——C++标准库 
2、C++各大有名库的介绍——准标准库Boost 
3、C++各大有名库的介绍——GUI 
4、C++各大有名库的介绍——网络通信 
5、C++各大有名库的介绍——XML 
6、C++各大有名库的介绍——科学计算 
7、C++各大有名库的介绍——游戏开发 
8、C++各大有名库的介绍——线程 
9、C++各大有名库的介绍——序列化 
10、C++各大有名库的介绍——字符串 
11、C++各大有名库的介绍——综合 
12、C++各大有名库的介绍——其他库 
13、C++名人的网站 

在 C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重 量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比 较著名的大型库。 


1、C++各大有名库的介绍——C++标准库 标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。 
1.1、Dinkumware C++ Library
参考站点:http://www.dinkumware.com/ 
P.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobb's程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其 C/C++的产品中采用Dinkumware的库。
1.2、RogueWave Standard C++ Library
参考站点:http://www.roguewave.com/ 
这个库在Borland C++ Builder的早期版本中曾经被采用,后来被其他的库给替换了。笔者不推荐使用。
1.3、SGI STL
参考站点:http://www.roguewave.com/ 
SGI公司的C++标准模版库。
1.4、STLport
参考站点:http://www.stlport.org/ 
SGI STL库的跨平台可移植版本。


2、C++各大有名库的介绍——准标准库Boost 
Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。 Boost中比较有名气的有这么几个库:
2.1 Regex  正则表达式库
2.2 Spirit   LL parser framework,用C++代码直接表达EBNF
2.3 Graph  图组件和算法
2.4 Lambda  在调用的地方定义短小匿名的函数对象,很实用的functional功能
2.5 concept check   检查泛型编程中的concept
2.6 Mpl   用模板实现的元编程框架
2.7 Thread   可移植的C++多线程库
2.8 Python   把C++类和函数映射到Python之中
2.9 Pool    内存池管理
2.10 smart_ptr   5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:
Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。中文版见笔者在《Dr.Dobb's Journal软件研发杂志》第7辑上的译文。
Boost总体来说是实用价值很高,质量很高的库。并且由于其对跨平台的强调,对标准C++的强调,是编写平台无关,现代C++的开发者必备的 工具。但是Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。并且很多Boost中的库功能堪称对语言功能的扩展,其构造用尽精巧的手 法,不要贸然的花费时间研读。Boost另外一面,比如Graph这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品 代码中多多利用。
参考站点:http://www.boost.org 

3、C++各大有名库的介绍——GUI 
在众多C++的库中,GUI部分的库算是比较繁荣,也比较引人注目的。在实际开发中,GUI库的选择也是非常重要的一件事情,下面我们综述一下可选择的GUI库,各自的特点以及相关工具的支持。 3.1、MFC
大名鼎鼎的微软基础类库(Microsoft Foundation Class)。大凡学过VC++的人都应该知道这个库。虽然从技术角度讲,MFC是不大漂亮的,但是它构建于Windows API 之上,能够使程序员的工作更容易,编程效率高,减少了大量在建立 Windows 程序时必须编写的代码,同时它还提供了所有一般 C++ 编程的优点,例如继承和封装。MFC 编写的程序在各个版本的Windows操作系统上是可移植的,例如,在Windows 3.1下编写的代码可以很容易地移植到 Windows NT 或 Windows 95 上。但是在最近发展以及官方支持上日渐势微。
3.2、QT
参考网站:http://www.trolltech.com 
Qt是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功 能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序 的基础。Qt也是流行的Linux桌面环境KDE 的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。[wangxinus注:QT目前已经是Nokia旗下的产品,原官方网站已经失效,目前为http://qt.nokia.com.2009年初发布的Qt4.5版本开始使用LGPL协议,诺基亚希望以此来吸引更多的开发人员使用Qt库]
3.3、WxWindows
参考网站:http://www.wxwindows.org 
跨平台的GUI库。因为其类层次极像MFC,所以有文章介绍从MFC到WxWindows的代码移植以实现跨平台的功能。通过多年的开发也是一个日趋完善的GUI库,支持同样不弱于前面两个库。并且是完全开放源代码的。新近的C++ Builder X的GUI设计器就是基于这个库的。[wangxinus注:迫于微软的施压,已经由WxWindows更名为wxWidgets]
3.4、Fox
参考网站:http://www.fox-toolkit.org/ 
开放源代码的GUI库。作者从自己亲身的开发经验中得出了一个理想的GUI库应该是什么样子的感受出发,从而开始了对这个库的开发。有兴趣的可以尝试一下。
3.5、WTL
基于ATL的一个库。因为使用了大量ATL的轻量级手法,模板等技术,在代码尺寸,以及速度优化方面做得非常到位。主要面向的使用群体是开发COM轻量级供网络下载的可视化控件的开发者。
3.6、GTK
参考网站:http://gtkmm.sourceforge.net/ 
GTK是一个大名鼎鼎的C的开源GUI库。在Linux世界中有Gnome这样的杀手应用。而Qt就是这个库的C++封装版本。[wangxinus注:“Qt 就是这个库的C++封装版本”是错误的。Qt早于GTK,最初Qt由于协议的原因引起社区的不满,另外开发了一个基于C语言的GTK库,后面的扩展版本为 GTK+。GTK+的Gnome和Qt的KDE是目前linux桌面的两大阵营,曾有水火不容之势。目前双方都以及开源社区的精神,已经和解。]

4、C++各大有名库的介绍——网络通信 
4.1、ACE
参考网站:http://www.cs.wustl.edu/~schmidt/ACE.html 
C++库的代表,超重量级的网络通信开发框架。ACE自适配通信环境(Adaptive Communication Environment)是可以自由使用、开放源代码的面向对象框架,在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ 包装外观(Wrapper Facade)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。
4.2、StreamModule
参考网站:http://www.omnifarious.org/StrMod 
设计用于简化编写分布式程序的库。尝试着使得编写处理异步行为的程序更容易,而不是用同步的外壳包起异步的本质。
4.3、SimpleSocket
参考网站:http://home.hetnet.nl/~lcbokkers/simsock.htm 
这个类库让编写基于socket的客户/服务器程序更加容易。
4.4、A Stream Socket API for C++
参考网站:http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.html 
又一个对Socket的封装库。

5、C++各大有名库的介绍——XML 
5.1、Xerces
参考网站:http://xml.apache.org/xerces-c/ 
Xerces-C++ 是一个非常健壮的XML解析器,它提供了验证,以及SAX和DOM API。XML验证在文档类型定义(Document Type Definition,DTD)方面有很好的支持,并且在2001年12月增加了支持W3C XMLSchema 的基本完整的开放标准。
5.2、XMLBooster
参考网站:http://www.xmlbooster.com/ 
这个库通过产生特制的parser的办法极大的提高了XML解析的速度,并且能够产生相应的GUI程序来修改这个parser。在DOM和SAX两大主流XML解析办法之外提供了另外一个可行的解决方案。
5.3、Pull Parser
参考网站:http://www.extreme.indiana.edu/xgws/xsoap/xpp 
这个库采用pull方法的parser。在每个SAX的parser底层都有一个pull的parser,这个xpp把这层暴露出来直接给大家使用。在要充分考虑速度的时候值得尝试。
5.4、Xalan
参考网站:http://xml.apache.org/xalan-c/ 
Xalan是一个用于把XML文档转换为HTML,纯文本或者其他XML类型文档的XSLT处理器。
5.5、CMarkup
参考网站:http://www.firstobject.com/xml.htm 
这是一种使用EDOM的XML解析器。在很多思路上面非常灵活实用。值得大家在DOM和SAX之外寻求一点灵感。
5.6、libxml++
http://libxmlplusplus.sourceforge.net/ 
libxml++是对著名的libxml XML解析器的C++封装版本。
5.7. TinyXML [wangxinus注:一个非常小巧的XML解析库,基于DOM的。]

6、C++各大有名库的介绍——科学计算 
6.1、Blitz++
参考网站:http://www.oonumerics.org/blitz 
Blitz++ 是一个高效率的数值计算函数库,它的设计目的是希望建立一套既具像C++ 一样方便,同时又比Fortran速度更快的数值计算环境。通常,用C++所写出的数值程序,比 Fortran慢20%左右,因此Blitz++正是要改掉这个缺点。方法是利用C++的template技术,程序执行甚至可以比Fortran更快。
Blitz++目前仍在发展中,对于常见的SVD,FFTs,QMRES等常见的线性代数方法并不提供,不过使用者可以很容易地利用Blitz++所提供的函数来构建。
6.2、POOMA
参考网站:http://www.codesourcery.com/pooma/pooma 
POOMA是一个免费的高性能的C++库,用于处理并行式科学计算。POOMA的面向对象设计方便了快速的程序开发,对并行机器进行了优化以达到最高的效率,方便在工业和研究环境中使用。
6.3、MTL
参考网站:http://www.osl.iu.edu/research/mtl 
Matrix Template Library(MTL)是一个高性能的泛型组件库,提供了各种格式矩阵的大量线性代数方面的功能。在某些应用使用高性能编译器的情况下,比如Intel的编译器,从产生的汇编代码可以看出其与手写几乎没有两样的效能。
6.4、CGAL
参考网站:www.cgal.org 
Computational Geometry Algorithms Library的目的是把在计算几何方面的大部分重要的解决方案和方法以C++库的形式提供给工业和学术界的用户。

7、C++各大有名库的介绍——游戏开发 
7.1、Audio/Video 3D C++ Programming Library
参考网站:http://www.galacticasoftware.com/products/av/ 

AV3D是一个跨平台,高性能的C++库。主要的特性是提供3D图形,声效支持(SB,以及S3M),控制接口(键盘,鼠标和遥感),XMS。
7.2、KlayGE
参考网站:http://home.g365.net/enginedev/ 
国内游戏开发高手自己用C++开发的游戏引擎。KlayGE是一个开放源代码、跨平台的游戏引擎,并使用Python作脚本语言。KlayGE在LGPL协议下发行。感谢龚敏敏先生为中国游戏开发事业所做出的贡献。
[wangxinus注:这个库国人了解很少,百度百科的KlayGE词条还是本人创建的。一个人开发一个游戏引擎库,是在让笔者汗颜,对作者表示钦佩!]
7.3、OGRE
参考网站:http://www.ogre3d.org 
OGRE(面向对象的图形渲染引擎)是用C++开发的,使用灵活的面向对象3D引擎。它的目的是让开发者能更方便和直接地开发基于3D硬件设备 的应用程序或游戏。引擎中的类库对更底层的系统库(如:Direct3D和OpenGL)的全部使用细节进行了抽象,并提供了基于现实世界对象的接口和其 它类。

8、C++各大有名库的介绍——线程 
8.1、C++ Threads
参考网站:http://threads.sourceforge.net/ 
这个库的目标是给程序员提供易于使用的类,这些类被继承以提供在Linux环境中很难看到的大量的线程方面的功能。
8.2、ZThreads
参考网站:http://zthread.sourceforge.net/ 
一个先进的面向对象,跨平台的C++线程和同步库。

9、C++各大有名库的介绍——序列化 
9.1、s11n
参考网站:http://s11n.net/ 
一个基于STL的C++库,用于序列化POD,STL容器以及用户定义的类型。
9.2、Simple XML Persistence Library
参考网站:http://sxp.sourceforge.net/ 
这是一个把对象序列化为XML的轻量级的C++库。

10、C++各大有名库的介绍——字符串 
10.1、C++ Str Library
参考网站:http://www.utilitycode.com/str/ 
操作字符串和字符的库,支持Windows和支持gcc的多种平台。提供高度优化的代码,并且支持多线程环境和Unicode,同时还有正则表达式的支持。
10.2、Common Text Transformation Library
参考网站:http://cttl.sourceforge.net/ 
这是一个解析和修改STL字符串的库。CTTL substring类可以用来比较,插入,替换以及用EBNF的语法进行解析。
10.3、GRETA
参考网站:http://research.microsoft.com/projects/greta/ 
这是由微软研究院的研究人员开发的处理正则表达式的库。在小型匹配的情况下有非常优秀的表现。

11、C++各大有名库的介绍——综合 
11.1、P::Classes
参考网站:http://pclasses.com/ 
一个高度可移植的C++应用程序框架。当前关注类型和线程安全的signal/slot机制,i/o系统包括基于插件的网络协议透明的i/o架构,基于插件的应用程序消息日志框架,访问sql数据库的类等等。
11.2、ACDK - Artefaktur Component Development Kit
参考网站:http://acdk.sourceforge.net/ 
这是一个平台无关的C++组件框架,类似于Java或者.NET中的框架(反射机制,线程,Unicode,废料收集,I/O,网络,实用工具,XML,等等),以及对Java, Perl, Python, TCL, Lisp, COM 和 CORBA的集成。
11.3、dlib C++ library
参考网站:http://www.cis.ohio-state.edu/~kingd/dlib/ 
各种各样的类的一个综合。大整数,Socket,线程,GUI,容器类,以及浏览目录的API等等。
11.4、Chilkat C++ Libraries
参考网站:http://www.chilkatsoft.com/cpp_libraries.asp 
这是提供zip,e-mail,编码,S/MIME,XML等方面的库。
11.5、C++ Portable Types Library (PTypes)
参考网站:http://www.melikyan.com/ptypes/ 
这是STL的比较简单的替代品,以及可移植的多线程和网络库。
11.6、LFC
参考网站:http://lfc.sourceforge.net/ 
哦,这又是一个尝试提供一切的C++库

12、C++各大有名库的介绍——其他库 
12.1、Loki
参考网站:http://www.moderncppdesign.com/ 
哦,你可能抱怨我早该和Boost一起介绍它,一个实验性质的库。作者在loki中把C++模板的功能发挥到了极致。并且尝试把类似设计模式这样思想层面的东西通过库来提供。同时还提供了智能指针这样比较实用的功能。
12.2、ATL
ATL(Active Template Library)是一组小巧、高效、灵活的类,这些类为创建可互操作的COM组件提供了基本的设施。
12.3、FC++: The Functional C++ Library
这个库提供了一些函数式语言中才有的要素。属于用库来扩充语言的一个代表作。如果想要在OOP之外寻找另一分的乐趣,可以去看看函数式程序设计的世界。大师Peter Norvig在 “Teach Yourself Programming in Ten Years”一文中就将函数式语言列为至少应当学习的6类编程语言之一。
12.4、FACT!
参考网站:http://www.kfa-juelich.de/zam/FACT/start/index.html 
另外一个实现函数式语言特性的库
12.5、Crypto++
提供处理密码,消息验证,单向hash,公匙加密系统等功能的免费库。
还有很多非常激动人心或者是极其实用的C++库,限于我们的水平以及文章的篇幅不能包括进来。在对于这些已经包含近来的库的介绍中,由于并不是每一个我们都使用过,所以难免有偏颇之处,请读者见谅。

13、C++名人的网站 
正如我们可以通过计算机历史上的重要人物了解计算机史的发展,C++相关人物的网站也可以使我们得到最有价值的参考与借鉴,下面的人物我们认为没 有介绍的必要,只因下面的人物在C++领域的地位众所周知,我们只将相关的资源进行罗列以供读者学习,他们有的工作于贝尔实验室,有的工作于知名编译器厂 商,有的在不断推进语言的标准化,有的为读者撰写了多部千古奇作…… 

1、Bjarne Stroustrup
http://www.research.att.com/~bs/ 
2、Stanley B. Lippman
http://blogs.msdn.com/slippman/ (中文版)
http://www.zengyihome.net/slippman/index.htm 
3、Scott Meyers
http://www.aristeia.com/ 
4、David Musser
http://www.cs.rpi.edu/~musser/ 
5、Bruce Eckel
http://www.bruceeckel.com 
http://blog.csdn.net/beckel Bruce Eckel 博客中文版
6、Nicolai M. Josuttis
http://www.josuttis.com/ 
7、Herb Sutter
http://www.gotw.ca/ 
http://blog.csdn.net/hsutter/ Herb Sutter 中文博客
8、Andrei Alexandrescu

http://www.moderncppdesign.com

==========================================================================

fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory.

Q1:fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory。

有初学C++者经常会出现如下错误:

fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory。

这个错误一般在使用Visual C++ .NET 2003/2005/208/2010时出现。

原因,iostream.h为C类库,C++类库中应该为iostream。

另外cin,cout等函数在std命名空间中。使用时应加上using namespace std;

A:

将#include <iostream.h>

改为#include <iostream>
using namespace std;

Q2:Fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory when trying to compile your C / C++ code

A:

This is a common mistake among C programmers who start coding in a new environment with a new compiler such as .NET 1.1 or .NET 2.0. You get the error because theiostream.hfile is no longer used with these compilers, instead use the ISO compliant file iostream:

----------------------------

dont forget to add
using namespace std;

----------------------------

my turbo c++ ver 3.0 could not open include files iostream.h and conio.h even trying #include<iostream>; is not working what is the problem and how to solve it,plz reply 



==========================================================================

C++ 发展历程

C++是从C语言发展演变而来,C语言最初在贝尔实验室由Dennis Ritchie在B语言的基础上开发出来的。目前比较流行的C语言版本几乎以ANSI C为基础的。1972年在DEC PDP-II计算机上实现了最初的C语言。C++是1980年由AT&T 贝尔实验室的Bjarne Stroustrup 博士创建的。

Bjarne Stroustrup博士,1950年出生于丹麦,先后毕业于丹麦阿鲁斯大学和英国剑桥大学,AT&T大规模程序设计研究部门负责人,AT&T 贝尔实验室和ACM成员。1979年,Stroustrup开始开发一种语言,当时称为"C with Class",后来演化为C++。1998年,ANSI/ISOC++标准建立,同年,Stroustrup推出其经典著作The C++ Programming Language的第三版。2002年10月,Stroustrup首次访问中国。

Bjarne Stroustrup 语录

  一、致读者

  1. 在编程序时,你是在为你针对某个问题的解决方案中的思想建立起一种具体表示。让程序的结构尽可能地直接反映这些思想:

  ★.如果你能把“它”看成一个独立的概念,就把它做成一个类。

  ★.如果你能把“它”看成一个独立的实体,就把它做成某个类的一个对象。

  ★.如果两个类有共同的界面,将此界面做成一个抽象类。

  ★.如果两个类的实现有某些显著的共同东西,将这些共性做成一个基类。

  ★.如果一个类是一种对象的容器,将它做成一个模板。

  ★.如果一个函数实现对某容器的一个算法,将它做成为对一族容器可用的模板函数。

  ★.如果一组类、模板等相互之间有逻辑联系,将它们放进一个名字空间里。

  2. 在你定义一个并不是实现某个像矩阵或复数这样的数学对象的类时,或者定义一个低层的类型如链接表的时候:

  ★.不要使用全局数据(使用成员)。

  ★.不要使用全局函数。

  ★.不要使用公用数据成员。

  ★.不要使用友元,除非为了避免a或c。

  ★.不要在一个类里面放“类型域”(指那种为了说明一个类所存储数据的情况而放置的标志域) ;采用虚函数。

  ★.不要使用在线函数(inline function),除非作为效果显著的优化。

  二、C++ 概览

  1. 不用害怕,一切都会随着时间的推移而逐渐明朗起来。

  2. 你并不需要在知道了C++的所有细节之后才能写出好的C++程序。

  3. 请特别关注程序设计技术,而不是各种语言特征。

  三、标准库概览

  1. 不要像重新发明车轮那样企图做每件事;去使用库。

  2. 不要相信奇迹;要理解你的库能做什么,它们如何做,它们做时需要多大的代价。

  3. 当你遇到一个选择时,应该优先选择标准库而不是其他的库。

  4. 不要认为标准库对于任何事情都是最理想的。

  5. 切记#include 你所用到的功能的头文件。

  6. 记住,标准库的功能定义在名字空间std之中。

  7. 请用string,而不是char*。

  8. 如果怀疑,就用一个检查区间范围的向量(例如Vec)。

  9. vector<T> 、list<T>和 map<key,value> 都比T[] 好。

  10. 如果向一个容器中添加一个元素,用push_back() 或 back_inserter()。

  11. 采用对vector的push_back(),而不是对数组的realloc()。

  12. 在main()中捕捉公共的异常。

  四、类型和声明

  1. 保持较小的作用域。

  2. 不要在一个作用域和它外围的作用域里采用同样的名字。

  3. 在一个声明中只声明一个名字。

  4. 让常用的和局部的名字比较短,让不常用的和全局的名字比较长。

  5. 避免看起来类似的名字。

  6. 维持某种统一的命名风格。

  7. 仔细选择名字,反映其意义而不是反映实现方式。

  8. 如果所用的内部类型表示某种可能变化的值,请用typedef 为它定义一个有意义的名字。

  9. 用typedef为类型定义同义词,用枚举或类去定义新类型。

  10. 切记每个声明中都必须描述一个类型(没有“隐式的int”)。

  11. 避免有关字符数值的不必要假设。

  12. 避免有关整数大小的不必要假设。

  13. 避免有关浮点类型表示范围的不必要假设。

  14. 优先使用普通的int 而不是short int 或者long int。

  15. 优先使用double 而不是float 或者long double。

  16. 优先使用普通的 char 而不是 signed char或者 unsigned char。

  17. 避免做出有关对象大小的不必要假设。

  18. 避免无符号算术。

  19. 应该带着疑问去看待从signed 到unsigned ,或者从unsigned 到signed 的转换。

  20. 应该带着疑问去看待从浮点到整型的转换。

  21. 应该带着疑问去看待向较小类型的转换,如将int转换到char。

  五、忠告

  1. 避免非平凡的指针算术。

  2. 当心,不要超出数组的界线去写。

  3. 尽量使用0而不是NULL。

  4. 尽量使用vector 和valarray ,而不是内部(C风格)的数组。

  5. 尽量使用string而不是以0结尾的char 数组。

  6. 尽量少用普通的引用参数。

  7. 避免 void*,除了在某些底层代码里。

  8. 避免在代码中使用非平凡的文字量(“神秘的数”)。相反,应该定义和使用各种符号常量。(这里应理解为避免使用无意义的立即数,而定义一些能够代表意义的常量,例如,用true而不要用(C/C++)或-1(VB))


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值