您的浏览历史

C++ Primer (3RD)中文版

促销活动

基本信息

编辑推荐

一本很全的C++著作,用来做参考手册很好!结合了Stanley Lippman的实践经验和Josée Lajoie对于ANSI/ISO标准C++的深入理解。

内容简介回到顶部↑

C++ Primer的第三版结合了Stanley Lippman的实践经验和Josée Lajoie对于ANSI/ISO标准C++的深入理解。这本指导书的第三版已经被重新改写过,以便更加精确地讲述标准C++的特性和用法。在本书中,对于C++初学者特别有价值的是一些来自真实世界中的程序例子,它们说明了泛型程序(generic program)的设计、面向对象程序的设计、模板的用法,以及使用标准C++进行程序设计的方方面面。而且,本书也在适当的地方讲到了一些习惯用法以及效率指导。



[center][b][a href=/computers/ebook/5926/CPrimer.zip]本书勘误[/a][/b][/center]

作译者回到顶部↑

本书提供作译者介绍

Stanley Lippman 他的职业是提供关于C++和面向对象的训练、咨询、设计和指导。他在成为一名独立咨询顾问之前,曾经是迪士尼动画公司的首席软件设计师。当他在AT&T B ell实验室的时候,领导了cfront 3.0版本和2.1版本的编译器开发组他也是Bjarne Stroustrup领导的Bell实验室Foundation项目的成员之一,负责C++程序设计环境中的对象模型部分。Stan是本书所有三个版本的作者,他还撰写了许多关于C++的文章。目前他已受雇于微软公司,负责Visual C++项目。



Josee Lajoie 是.. << 查看详细

作者: Stanley B.Lippman
畅销图书《C++ Primer (3RD)中文版》的原版作者   Stanley B.Lippman的职业是提供关于C++和面向对象的训练、咨询、设计和指导。他在成为一名独立咨询顾问之前,曾经是迪士尼动化公司的首席软件设计师。当他在AT&T Bell实验室的时候,领导了cfront 3.0版本和2.1版本的编译器开发组。他也是Bjarne Stroustrup领导的Bell实验室Foundation项目的成员之一,负责C++程序设计环境中的对象模型部分。他还撰写了许多关于C++的文章。目前他已受雇于微软公司,负责Visual C++项目。遍及全球,深受广大C++学者的.. << 查看详细

[同作者作品]
深度探索C++对象模型(影印版)
C# Primer(影印版)
C++ Primer (3rd Edition)(英文原版进口)

潘爱民
潘爱民,浙江海宁人,获得了南开大学数学学士学位,清华大学工学硕士学位,以及北京大学计算机科学博士学位。他从中学时代开始接触计算机编程,经历了从DOS到Windows各种版本的发展历程。潘爱民曾经长期从事软件技术的研究和开发工作,撰写了大量软件技术文章,1999年曾经是《微电脑世界》杂志社的合作专家。他著写了《COM原理与应用》(1999年出版),翻译了多部经典名作,如《Visual C++技术内幕》(第四、六版)、《C++ Primer中文版》(第三版)、《COM本质论》、《计算机网络》(第四版)等。从2001年开始,潘爱民在北京.. << 查看详细

目录回到顶部↑

第一篇 C++概述
第1章 开始 3
1.1 问题的解决 3
1.2 C++程序 4
1.3 预处理器指示符 10
1.4 注释 14
1.5 输入/输出初步 16
第2章 C++浏览 20
2.1 内置数组数据类型 20
2.2 动态内存分配和指针 23
2.3 基于对象的设计 26
2.4 面向对象的设计 36
2.5 泛型设计 44
2.6 基于异常的设计 50
2.7 用其他名字来命名数组 54
2.8 标准数组--向量(vector) 59
第二篇 基本语言
第3章 C++数据类型 67
3.1 文字常量 67
3.2 变量 70

译者序回到顶部↑

这是我心仪已久的一本书。我相信很多读者也有同样的感受。
在所有的编程语言中,C++可以说是最为复杂的。它既是一门传统的编程语言,也是一门新的编程语言。说它是一门传统语言,是因为C++诞生已将近20年的历史了,特别是最近10年来C++得到了快速的发展。C++是计算机软件领域中覆盖面最为广阔的编程语言。并且,与C++相关的智力投入也是其他任何一门语言所无法比拟的。人们对于C++的研究已经远远超出了对于一门编程语言所应有的关注。所以,现在的C++已经非常成熟,有大量的资源(文档、书籍、源代码等等)可供我们使用。说C++是一门新的编程语言,是因为在1998年C++由ISO( International Standards Organization)完成了标准化,从此C++领域有了统一的标准,所有的编译器都将向标准靠拢(或者说,与标准兼容),这有利于我们写出可移植的C++代码来。同时C++标准也统一了C++标准库,为C++用户提供了最为基本的基础设施。C++经历了多年的发展,终于有了一个相对稳定的版本,所以,我们应该用一种新的眼光来看待C++,而不再简单地把C++认为是C语言的超集。本书正是新版本C++的写照,通过本书,你可以重新审视C+十语言,这是我翻译过程中最为真切的体会,它纠正了我过去对于C++语言的一些误解。虽然我从1993年开始就一直在使用C++,但是直到阅读了这本书之后,我才从真正意义上全面地认识了C++语言。
本书的权威性无需我多说,看看本书原著的前言,了解了两位作者的背景之后,你就可以知道,这本书是经验和标准的完美结合。Stanley Lippman从1984年开始一直从事C++方面的工作,在C++的实现与应用方面有着丰富的经验。本书前两个版本的成功也证明了他在阐释 C++语言方面的独到之处。Josee Lajoie从1990年开始成为C++标准委员会的一名成员,并且承担了很重要的职务。由于她的参与,毫无疑问,本书一定是与标准兼容的。
讲述C++的书非常多,并且不乏优秀和经典之作。在如此众多的C++书籍中,本书仍具有不可替代的地位,我想主要的原因在于本书具有以下几个特色:
(l)内容广阔。从本书的规模(厚度)就可以看出这一点,C++语言融入了大量优秀的特性,其内容的丰富程度已经远非C语言所能及。在所有的C++书籍中,本书的覆盖面是最为广阔的,从最基本的C++程序设计,到面向对象程序设计,以及基于模板的程序设计,面面俱到,而且讲解细致入微,值得仔细品味。
(2)许多实际的范例程序。纯粹的技术讲解总是非常枯燥的,但是阅读本书并不感觉枯燥,因为作者在介绍每一部分内容的时候都结合一个实际的例子,读者通过这些例子能够很容易地掌握相应的技术要点,并且看到每一种技术的实际用法,这是本书之所以引人入胜的重要原因之一。
(3)叙述内容的安排。C++是一门多风格的程序设计语言(multi-paradigm Programming language),不仅支持面向对象程序设计,也支持其他的程序设计思想。本书的叙述结构正体现了C++的这种特点,作者从程序设计思想的角度分别讲述了C++的各种语言要素,便读者比较容易抓住C++语言的本质特征。
(4)与编译器无关,遵从C++标准。本书的内容并不特定于某一个C++编译器实现,而是适用于所有与C++标准兼容的编译器。作者在讲解过程中也指出了编译器的一些内部考虑,例如,编译器如何在各种上下文环境中解析重载函数,如何处理除式类型转换,等等,这些内容有利于加深读者对C++的理解。
(5)配套的练习。在每一节讲解之后,作者给出了一些练习,这些练习反映了这一节的中心内容,读者通过这些练习可以巩固所学的知识。所以,本书也可以被用作教材,用于系统全面地学习C++语言。
虽然本书书名《C++Primer》的中文含义是"C++初级读本",但是它绝对不是一本很轻松的入门教材,特别是关于名字空间、函数重载解析过程、模板机制和泛型算法(generic algorithms)等内容并不是一个 C++初学者能够很快掌握的。如果你以前没有看过其他的C++书籍,那么可能需要反复阅读多遍才能掌握本书讲述的内容:如果你已经有了C++的基础(比如,已经看过其他的C++入门书籍),那么阅读本书可以让你快速掌握C++的要点:如果你是一名有多年C++实践经验的程序员,那么阅读本书可以让你重新理解C++。总之,这是一本很好的学习和参考书籍,值得你反复阅读。但是,正如书名所指示的,它不是一本高级书籍。按照我个人理解,它的技术水准应该在中等偏深一点的层次上。
本书的翻译工作由我和张丽共同完成,张丽完成了初稿的翻译工作,我做了第二遍翻译检查工作,书中每一句话我都认真检查过,个别地方还修改了原著的一些错误。C++中有些术语还没有统一的中文说法,对于这些术语的处理,我们尽可能地做到符合中文的语言习惯,读者可以参考本书最后所附的英汉对照索引。这份索引是由中国电力出版社的诸位编辑手工制作完成的。他们是刘江、朱恩从、陈维宁、程璐、关敏、刘君、夏平、宋宏、姚贵胜、常虹、乔晶、阎宏。感谢他(她)们的辛勤劳动。
在翻译过程中,不断收到读者来信或者来电询问这本书的出版情况。我理解读者对于一本好书的迫切心情,我的想法是,有关C++的书籍和资料如此之多,所以,学习C++不一定非要阅读这本书,但是它可以加快你学习的步伐,并且帮助你深入而全面地理解C++。既然你已经看到了这本书,那就不要错过吧。
这本书不会让你失望的,我坚信这一点。
潘爱民
北京大学燕北园



前言回到顶部↑

C++Primer的第二版和第三版之间的变化非常大。最引人注意的是,C++已经被国际标准化,这不但为语言增加了新的特性,比如异常处理、运行时刻类型识别(RTTI)、名字空间、内置布尔数据类型、新的强制转换方式,而且还大量修改并扩展了现有的特性,比如模板、支持面向对象(object-oriented)和基于对象(object-based)程序设计所需要的类(class)机制、嵌套类型、以及重载函数的解析机制。也许更重要的是,一个覆盖面非常广阔的库现在成了标准C++的一部分,其中包括以前的标准模板库或STL。新的string类型、一组顺序和关联容器类型棗比如vector、list、map和set棗以及在这些类型上进行操作的一组可扩展的泛型算法(generic algorithms),都是这个新标准库的特性。本书不但包括了许多新的资料,而且还涵盖了怎样在C++中进行程序设计的新的思考方法。简而言之,实际上,不但C++已经被重新创造,它的C++ Primer,第三版,也有了很大的变化。
在此第三版中,不但对语言的处理方式发生了根本的变化,而且作者本身也发生了变化:首先,我们的人数已经加倍。而且,我们的写作过程也已经被国际化了(尽管我们还牢牢扎根于北美大陆):Stan是美国人,Josée是加拿大人。最后,这个双作者关系也反映了C++团体的两类主要活动:Stan现在正在华特迪思尼动画公司(Walt Disney Feature Animation)致力于以C++为基础的3D计算机图形和动画应用,而Josée正专心于C++的定义与实现,同时她也是C++标准的核心语言小组的主席,以及IBM加拿大实验室的C++编译器组的成员。
Stan是Bell实验室中与Bjarne Stroustrup(C++的发明人)一起工作的早期成员之一,从1984年开始一直从事C++方面的工作。Stan曾经致力于cfront的各种实现,从1986年的版本1.1到版本3.0,并领导了2.1和3.0版本的开发组。之后,他参与了Stroustrup领导的、Foundation Research Project项目中关于程序设计环境的对象模型部分。
Josée作为IBM加拿大实验室C++编译器组的成员已经有八年时间了。从1990年开始她成为C++标准委员会的一个成员。她曾经担任委员会的副主席三年,目前担任核心语言小组委员会的主席已经达四年之久。
C++ Primer的第三版展示了一个大幅修订的版本,不仅反映了语言的变化和扩展,也反映了作者洞察力和经验的变化。
本书的结构
C++ Primer 为C++国际标准提供了一个全面的介绍。在这种意义上,它是一个初级读本(primer),它提供了一种指导性质的方法来描述C++语言。(但是,它也为C++语言提供了一种简单而温和的描述,从这个角度来看,它不是一本初级读物。)C++语言的程序设计要素,比如异常处理、容器类型、面向对象的程序设计等等,都在解决特定问题或程序设计任务的上下文环境中展示出来。C++语言的规则,比如重载函数调用的解析过程以及在面向对象程序设计下支持的类型转换,也都有广泛的论述,这看起来就超出了一本初级读本的范畴。我们相信,为了加强读者对于C++语言的理解,覆盖这些内容是必要的。对于这些材料,读者应该不时地回头翻阅,而不是一次消化了事。如果开始的时候你发现这些内容比较难以接受或者过于枯燥,请把它们放到一边,以后再回头来看棗我们把这样的章节加上特殊的记号:※。
我们没有假设读者具有C语言的知识,但是,熟悉某些现代的块结构语言会使得学习进展更快一些。本书的意图是作为学习C++的第一本书;而不是学习程序设计的第一本书!为了确保这一点,我们都以一个公共的词汇表作为开始;然而,开始的章节涵盖了一些基本的概念,比如循环语句和变量等,有些读者可能会觉得这些概念太浅显了。不必担心:深层的内容很快就会看到。
C++的许多威力来自于它对程序设计新方法的支持,以及对程序设计问题的思考方式。因此,要想有效地学习使用C++,不只要求简单地学会一组新的语法和语义。为了使这种学习更加容易,本书将围绕一系列可扩展的例子来组织内容。这些例子被用来介绍各种语言特性的细节,同时也说明了这些语言特性的动机所在。当我们在一个完整例子的上下文环境中学习语言特性时,这样的特性为什么会有用处的原因也就变得很清楚了,它使我们对于“何时以及怎样在实际的问题解决过程中使用这些特性”有了一点感觉。另外,把焦点放在例子上,可使读者能够尽早地使用一些概念,随着读者的知识基础被建立起来之后,这些概念会被进一步完整地解释清楚。本书初期的例子含有C++基本概念的简单用法,读者可以先领略一下C++中程序设计的概貌,而不要求完全理解C++程序设计和实现的细节。
第1章和第2章形成了一个独立完整的C++介绍和概述。第1篇的目的是使我们快速地理解C++支持的概念和语言设施,以及编写和执行一个程序所需要的基础知识。读完这部分内容之后,你应该对C++语言有了一些认识,但是还谈不上真正理解C++。这就够了:那是本书余下部分的目的。
第1章向我们介绍了语言的基本元素:内置数据类型、变量、表达式、语句以及函数。它将介绍一个最小的、合法的C++程序,简要讨论编译程序的过程,介绍所谓的预处理器(preprocessor),以及对输入和输出的支持。它给出了多个简单但却完整的C++程序,鼓励读者亲自编译并执行这些程序。第2章介绍了C++通过类机制,为基于对象和面向对象的程序设计提供了支持,同时通过数组抽象的演化过程来说明这些设计思想。另外,它简要介绍了模板、名字空间、异常处理,以及标准库为一般容器类型和泛型程序设计提供的支持。这一章的进度比较快,有些读者可能会觉得难以接受。如果是这样,我们建议你跳过这一章,以后再回头来看。
C++的基础是各种设施,它们使用户能够通过定义新的数据类型来扩展语言本身,这些新类型可以具有与内置类型一样的灵活性和简单性。掌握这些设施的第一步是理解基本语言本身。第3章到第6章(第二篇)在这个层次上介绍了C++语言。
第3章介绍了C++语言预定义的内置和复合数据类型,以及C++标准库提供的string、complex、vector类数据类型。这些类型构成了所有程序的基石。第4章详细讨论了C++语言支持的表达式,比如算术、关系、赋值表达式。语句是C++程序中最小的独立单元,它是第5章的主题。C++标准库提供的容器类型是第6章的焦点。我们不是简单地列出所有可用的操作,而是通过一个文本查询系统的实现,来说明这些容器类型的设计和用法。
第7章到第12章(第3篇)集中在C++为基于过程化的程序设计提供的支持上。第7章介绍C++函数机制。函数封装了一组操作,它们通常形成一项单一的任务,如print()。(名字后面的括号表明它代表了一个函数。)关于程序域和变量生命期的概念、以及名字空间设施的讨论是第8章的主题。第9章扩展了第7章中引入的关于函数的讨论,介绍了函数的重载。函数重载允许多个函数实例(它们提供一个公共的操作)共享一个公共的名字(但是,要求不同的实现代码)。例如,我们可以定义一组print()函数来输出不同类型的数据。第10章介绍和说明函数模板的用法。函数模板为一组可能无限多个函数实例的自动生成提供一个规范描述(“处方”),这些函数实例的类型不同,但实现保持不变。
C++支持异常处理设施。一个异常表示一个没有预料的程序行为,比如所有可用的程序内存耗尽。异常出现的程序部分抛出一个异常棗即,使程序的其他部分可以访问到这个异常。程序中的某个函数必须捕获这个异常并做一些必要的动作。对于异常处理的讨论跨越了两章。第11章用一个简单的例子介绍了异常处理的基本语法和用法,该例子捕获和抛出一个类类型的异常。因为在我们的程序中,实际被处理的异常通常是一个面向对象类层次结构的类对象,所以,关于怎样抛出和处理异常的讨论一直继续到第19章,也就是在介绍面向对象程序设计之后。
第12章介绍标准库提供的泛型算法集合,看一看它们怎样和第6章的容器类型以及内置数组类型互相作用。这一章以一个使用泛型算法的程序设计作为开始。第6章引入的iterator(迭代器)在第12章被进一步讨论,因为它们为泛型算法与实际容器的绑定提供了粘合剂。这一章也引入并解释了函数对象的概念。函数对象使我们能够为泛型算法中用到的操作符(比如等于或小于操作符)提供替换语义。关于泛型算法在附录中有详细说明,并带有用法的示例。
第13章到第16章(第4篇)焦点集中在基于对象的程序设计上棗即,创建独立的抽象数据类型的类设施定义和用法。通过创建新的类型来描述问题域,C++允许程序员在写应用程序时可以不用关心各种乏味的簿记工作。应用程序的基本类型可以只被实现一次,而多次被重用,这使程序员能够将注意力集中在问题本身上,而不是实现细节上。封装数据的设施可以极大地简化应用程序的后续维护和改进工作。
第13章集中在一般的类机制上:怎样定义一个类、信息隐藏的概念(即,把类的公有接口同私有实现分离),以及怎样定义并封装一个类的对象实例。这一章还有关于类域、嵌套类、类作为名字空间成员的讨论。
第14章详细讨论C++为类对象的初始化、析构以及赋值而提供的特殊支持。为了支持这些特殊的行为,需要使用一些特殊的成员函数,分别是构造函数、析构函数和拷贝赋值操作符。这一章我们还将看一看按成员初始化和拷贝的主题(即指一个类对象被初始化为或者赋值为该类的另一个对象),以及为了有效地支持按成员初始化和拷贝而提出的命名返回值(named return value)扩展。
第15章将介绍类特有的操作符重载,首先给出一般的概念和设计考虑,然后介绍一些特殊的操作符,如赋值、下标、调用以及类特有的new和delete操作符。这一章还介绍了一个类的友元的概念(对一个类具有特殊的访问特权)以及友元的必要性。然后讨论用户定义的转换,包括底层的概念和用法的扩展实例。这一章还详细讨论了函数重载解析的规则,并带有代码示例说明。
评论交流

共有1098人开贴评论  2830人参与评论  1069人参与打分 查看

745人
 69%
用户平均打分
我要写评论 help如何参与评论和打分
186人
 17%
86人
 8%
25人
 2%
27人
 2%

wgeg

专家级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2010-1-8 11:13:00
我的想法是,有关C++的书籍和资料如此之多,所以,学习C++不一定非要阅读这本书,但是它可以加快你学习的步伐,并且帮助你深入而全面地理解C++。既然你已经看到了这本书,那就不要错过吧。
这本书不会让你失望的,我坚信这一点。 ------潘爱民
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

sculdq
一级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2009-10-11 16:09:00
书的内容确实不错,不过书的印刷质量实在是太差了,纸张太差了,一开始还以为是盗版的呢
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

hp.sun

三级评论员
评价等级:  
发表于:2004-1-4 2:33:00
原书确实是好书,但是。。。

你去看看勘误表就知道翻译的怎么样了。连“硕士”、“博士”这两个词都会翻译错。其实术语上的错误还有很多都没列出来。

譬如:operator翻译成“操作符”,难道这个概念在译者上小学时不曾遇到过么?不就是上小学时学过的“算符”一词么?居然翻译的好像在学习汇编语言似的。
回复 ( 5条评论-- 点击查看讨论 )
您觉得呢? 送鲜花 (得4支)  扔鸡蛋 (得10个)

jxmchess01

二级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2010-1-31 23:15:00
这本书真是经典之作
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

haynes
一级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2010-1-25 10:35:00
经典书籍。强力推荐
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)
我要写评论
查看所有评论交流(共1098条)