新書推薦:
《
敦煌写本文献学(增订本)
》
售價:NT$
1010.0
《
耕读史
》
售價:NT$
500.0
《
地理计算与R语言
》
售價:NT$
551.0
《
沈括的知识世界:一种闻见主义的实践(中华学术译丛)
》
售價:NT$
398.0
《
大思维:哥伦比亚商学院六步创新思维模型
》
售價:NT$
332.0
《
宏观经济学(第三版)【2024诺贝尔经济学奖获奖者作品】
》
售價:NT$
709.0
《
UE5虚幻引擎必修课(视频教学版)
》
售價:NT$
505.0
《
真需求
》
售價:NT$
505.0
|
編輯推薦: |
★以实例为背景
精心筛选作者多年亲历开发案例,融入解决问题实践技巧
★避开应用陷阱
加深对C++开发的认识,熟练驾驭C++设计中种种潜在的风险
★提升代码质量
既要有效率,又要有弹性;既要面向对象,又兼容面向过程
★凝聚经验感悟
语言平实,结合主题,娓娓道来,提升解决实际问题的功力
★本书中源代码下载地址:http:www.tdpress.comzyzxtsscflwj
|
內容簡介: |
本书深入浅出地介绍了C++语言的各种语法特性,不仅是一本实用的参考用书,还是笔者多年来对C++语言开发的经验和感悟。内容结构独具匠心,以实际实例为背景,结合主题,探讨C++语言面向对象的深入细节,有助于加深读者对C++语言开发的运用。
本书涵盖了与C++语言相关的大部分知识,在提供丰富内容的同时,进一步探讨了更高深的C++特性及其应用场景,旨在帮助有较少开发经验的C++程序员加深理解,从而避开C++开发的误区和陷阱,同时也可以帮助中高级读者进一步提高分析和解决实际问题的能力。
|
關於作者: |
刘光 硕士 10年工作经验
3年CC++编程经验。2年Visual Studio、MFC开发经验。熟悉TCPIP协议族各类协议,尤其精通TCPIP高性能协议栈实现,有独自TCPIP高性能协议栈设计实现经验。
精通Socket网络编程,熟悉信息安全相关知识和PKI。精通各类加密和HTTPS网络加密通信编程。尤其精通大并发高性能网络编程。熟悉Openssl库,熟悉Lwip开源库。熟悉Winpcap开源库。熟悉产品开发流程,熟练掌握需求分析,场景分析,概要设计,详细设计,测试用例等文档编写。
|
目錄:
|
目 录
第1篇 C++基本语言特征
第1章 快速入门
实用经验1 C++程序由哪些部分构成
实用经验2 既有面向过程,为何还要面向对象
实用经验3 掌握在C++中如何使用C
实用经验4 C++比C加了什么
第2章 变量和类型
实用经验5 计算机是如何存储变量的
实用经验6 确保每个对象在使用前已被初始化
实用经验7 局部变量和全局变量的差别
实用经验8 掌握变量定义的位置与时机
实用经验9 引用难道只是别人的替身
实用经验10 枚举和一组预处理的#define有何不同
实用经验11 为何struct x1{struct x1 stX};无法通过编译
实用经验12 实现可变数组struct{int namelen; char namestr[1];};
实用经验13 typedef使用的陷阱
实用经验14 优化结构体中元素的布局
实用经验15 既有结构,为何引入联合
实用经验16 提防隐式转换带来的麻烦
实用经验17 深刻理解void和void*
实用经验18 如何判定变量是否相等
第3章 关键字
实用经验19 尽可能多地使用const
实用经验20 volatile和mutable用在何处
实用经验21 尽量用newdelete替代mallocfree
实用经验22 使用newdelete时要采用相同的形式
实用经验23 sizeof和对象的大小
实用经验24 谨慎使用static
第4章 数组和指针
实用经验25 理解指针的本质
实用经验26 论数组和指针的等价性
实用经验27 再论数组和指针的差异性
实用经验28 充满疑惑的数组指针和指针数组
实用经验29 禁止以多态的形式处理数组
实用经验30 防微杜渐,拒绝野指针
实用经验31 臭名昭著的空指针到底是什么
实用经验32 多维数组和指针
实用经验33 引用和指针的差异
第5章 表达式和语句
实用经验34 运算符引发的混乱
实用经验35 尽量使用C++转换操作符
实用经验36 表达式求值顺序不要想当然
实用经验37 switch-case的陷阱
实用经验38 a || b和a&&b的陷阱
实用经验39 “悬挂”else引起的问题
实用经验40 标示语句结束的分号的思考
实用经验41 goto真的一无是处吗
实用经验42 条件操作符和逗号操作符
实用经验43 同魔鬼数字说再见
实用经验44 关于循环语句的讨论
第6章 函数
实用经验45 禁止函数返回局部变量的引用
实用经验46 函数传值、传指针及传引用的效率分析
实用经验47 内联函数会像宏一样替换吗
实用经验48 函数重载需考虑什么
实用经验49 不要让main返回void
实用经验50 尽量拒绝使用变参函数
实用经验51 如何降低函数的圈复杂度
第7章 字符和字符串
实用经验52 关于字符编码的讨论
实用经验53 请牢记字符串结束标志为''\0''
实用经验54 请务必小心使用memcpy系列函数
实用经验55 正确地使用字符串处理函数
第8章 预处理
实用经验56 使用#define定义字面值和伪函数
实用经验57 #define的使用陷阱
实用经验58 防止重复包含头文件
实用经验59 assert的副作用
实用经验60 关于#和##的讨论
第2篇 类和数据抽象
第9章 类
实用经验61 绝不让构造函数为虚函数
实用经验62 避免在构造析构函数中调用虚函数
实用经验63 不使用编译器自动生成的函数,就明确拒绝
实用经验64 struct和class的关系
实用经验65 class对象大小与什么有关系
实用经验66 将成员变量声明为private
实用经验67 关于对象复制的思考
实用经验68 首选初始化列表实现类成员初始化
实用经验69 理解常量成员函数
第10章 重载操作符
实用经验70 由重载&&、||和,操作符想到的
实用经验71 区别++--操作符前置和后置差异
实用经验72 重载operator[]的注意事项
实用经验73 重载operator=的陷阱
实用经验74 重载操作符,类成员函数还是友元函数
实用经验75 有些运算符重载应该成对实现
第3篇 C++面向对象机制
第11章 继承和多态
实用经验76 多态基类的析构函数应为虚函数
实用经验77 明晰public、protected、private 3 种继承差别
实用经验78 慎用多继承机制
实用经验79 时刻提防对象切片
实用经验80 明晰派生类构造析构运行原理
实用经验81 谨慎使用private继承
实用经验82 区分overloading、overriding、 hiding的差异
实用经验83 确保public继承是“is-a”关系
实用经验84 区分接口继承和实现继承
实用经验85 不要重新定义继承而来的非虚函数
实用经验86 绝对不要重新定义继承而来的默认参数
实用经验87 切忌继承过度滥用
实用经验88 虚函数重载的陷阱
实用经验89 关于虚赋值的问题
第12章 模板和泛型
实用经验90 将模板的声明和定义放到一个文件中
实用经验91 区分继承、模板及组合
实用经验92 区分函数模板与模板函数、类模板和模板类
第4篇 C++高级特性
第13章 高级特性
实用经验93 合理地使用断言(ASSERT)
实用经验94 虚函数的实现原理
实用经验95 检测和定位内存泄漏的技巧
实用经验96 可执行文件*.exe*.dll剖析
实用经验97 C++为何引入命名空间
实用经验98 避免使用“聪明的技巧”
实用经验99 试着在代码中使用设计模式
实用经验100 改善C++程序运行效率的措施
实用经验101 提高(改善)代码可读性的措施
|
內容試閱:
|
前 言
C++是当今主流程序设计语言的一种,由美国AT&T贝尔实验室的Bjarne Stroustrup博士于20世纪80年代发明和实现的,目的是解决C语言开发过程中遇到的棘手问题。C++语言起初被称之为“C with Classes”、“a better C”,作为C语言的增强版而出现,直到1998年才正式更名为C++。
C++是一种颇受争议的语言。这主要体现在其复杂性和流行性两个方面。Linux之父就称其为“糟糕程序的垃圾语言”,但其优良的兼容性却使其颇受欢迎。
首先C++是一种复杂、难以掌握的语言,C++的复杂难以掌握不仅表现在其复杂的语法,更体现在其提供的4种编程思维模型上面,包括:procedural-based,object-based,object-oriented,generic paradigm。这些是C++的设计目的决定的。C++语义的目标是:既要有效率,又要有弹性;既要面向对象,又要兼容面向过程。学习起来自然不可能很简单。
再者C++是一门流行的语言。在Tiobe编程语言热度排行榜中C++稳居前三。这主要原因是C++具有面向对象的逻辑表达优势,还具有C语义在时间和空间上的效率。这是每个程序员都向往的。
难学易用,可以说是C++语言最大的特点。同样也是其独具魅力的地方。C++复杂的特性导致C++语言比较难以驾驭。烦琐的面向对象特性,使得初学者很容易陷入误区,而一知半解的掌握又使得C++设计工程布满更多的陷阱。为了使您更好地了解C++语言特性,也为了更好地避免种种潜在的风险而不得不对其有更深入的认识,这也是本文写作的初衷。
在C++语言发展的最初阶段,人们想知道C++是个什么东西。现在C++语言已发展成熟,如何正确高效地使用它,已经成为我们亟待解决的问题。对于那些刚加入C++开发行列的程序员来说。别人的前车之鉴,或许能对自己有很大的帮助,可以帮助自己快速、准确地掌握C++语言的特征。
章节安排
全书分为四篇,共13章,由浅入深地讲解C++语言的使用注意事项和优秀实践。每篇内容可总结如下:第一篇讲述C++基本的语言特征,第二篇讲述类和数据抽象,第三篇讲述C++面向对象的机制,第四篇讲述C++的一些高级特征。
第一篇:包括1~8章,内容涵盖C++基本语言特征。涉及概念包括C++的关键字、数组、指针、表达式、函数、字符串、预处理指令等最基本的语言特征。
第1章:以C语言为参照,对C++的语言特性进行了一些提纲挈领的介绍。重点介绍C++和C语言的区别和联系,面向对象的概念等。
第2章:类型是所有程序的基础,类型告诉数据代表什么意思以及针对此数据可执行的操作。C++定义的基本类型有:字符型、整型、浮点型等,除此之外还可自定义类型。本章介绍C++中全局变量和局部变量各自的应用特点,列举了结构体和联合体的适用场景,并对类型转换进行了一些深度探讨。
第3章:介绍关键字的用法介绍和注意事项,包括const,volatile,mutable,static,sizeof,new和delete,以及关键字使用中的陷阱。
第4章:数组和指针是C++最为重要的两个概念,数组保存某种类型的一组对象,数组一旦创建,就不允许添加新元素了,而指针可以遍历数组中的元素。本章所有的论题均涉及两者常见的一些应用陷阱。
第5章:本章的主题是表达式和语句。C++提供了丰富的运算符,并定义针对内置类型操作符含义,除此之外还支持操作符重载。此章节的议题分类讨论一些容易陷入误区的表达式和语句。
第6章:本章的主题是函数,函数是C++语言重要的组成部分,其和C++中的类型、数组等概念具有同等的地位,对函数的讨论,包括参数传递、重载、覆盖事项、以及内联函数等。
第7章:介绍字符和字符串的使用注意事项。每个可执行程序都会涉及字符和字符串。因为程序要接受用户输入,产生对应输出(显示)。用户输入的数据计算机如何解释,以及计算后的输出显示。这些都涉及字符的编码。
第8章:预处理是C++程序编译的第一个步骤,预处理在源代码编译之前进行一些文本性质的操作。具体包括注释删除,插入被#include包含的文件内容、定义和替换有#define指令定义的符号,以及确定代码部分内容是否应根据一些条件编译指令进行编译。本章议题主要涉及预处理指令,包括define,assert和##等。本章的议题将向你展示C++编译器预处理所进行的不为人知的事情,以及其存在的陷阱。
第二篇:包括9、10两章。内容涵盖C++的类和数据抽象封装。这些是C++区分面向过程语言最根本的特征之一。
第9章:本章议题涉及类的设计和实现,包括类的构造、析构、数据(成员函数)访问权限、类的继承等,这些都是类的类型基础。本章的议题将向你展示类的类型设计和实现的陷阱和注意事项。
第10章:本章主要讨论操作符的重载,操作符重载过程的一些注意事项。本章将详细为你讲述重载操作符的一些内容。运用本章提供的信息,我想你会从以前的困扰中走出,像专家一样将“操作符重载”玩弄于股掌之间。
第三篇:包括11、12两章。内容涵盖C++面向对象编程机制。它们是C++语言面向对象的灵魂所在。
第11章:本章议题围绕继承和多态展开。将为你阐述继承和多态的实现机制,以及两者的关系。通过本章议题的阅读,可帮助你对继承和多态有更为深刻的认识。
第12章:本章讨论的议题为模板和范型。通过本章的阅读可帮你加深对“面向对象所依赖的多态是运行时的多态,而泛型模板所依赖的多态是编译时的多态或参数式多态”的认识。
第四篇:包括13章,主要讨论C++编程中一些高级特征。在某些适当的场景下是有用的,但并不是所有的场景下都必须。没有掌握它们,虽然你可以写出运行良好的程序,但是,如果你掌握并使用了它们,你所编写的代码会在扩展性、可维护性方面,更加具有优势。
第13章:本章讨论的议题主要围绕C++的部分高级特性。涉及虚函数、命名空间、运行效率、代码可读性等诸多方面。掌握它们是你迈向C++高级程序员的必经之路。
读者对象
本书适合有一定的CC++语言基础,并想深入了解C++面向对象程序设计方法的初学者;有兴趣了解C++,并应用于实际工作中的C++程序开发人员。
致谢
感谢远在故乡的父母,你们的关心和爱护,是我面对困难和失落时重新奋起的动力源泉。让我不敢懈怠,在任何时候都不轻言放弃。感谢张新华在本书成文时,对我的默默陪伴和支持,愿你生活幸福。感谢吴玲这段时间的关心与呵护,使我从生活的阴霾中走出。感谢林曙光对本书的校审工作。
谨以此书献给爱我的朋友和家人,以及那些热爱C++的同道中人。
|
|