书稿《C++释难解惑》(C++130个问题)已上传到CSDN,欢迎下载

来源:互联网 发布:找淘宝运营 编辑:程序博客网 时间:2024/05/16 04:47

我已经将我与陈翼男博士合写的的书稿《C++释难解惑》上传到CSDN,欢迎朋友们下载。

我做过10年程序员,在大学教过15年书,对C++内部机制有较深入的理解。陈翼男博士在飞利浦亚洲研究院有较多的编程实践,很有心得。本书能帮您解决C++的许多疑惑,并让您学到实际编程的许多经验。本书尚未出版,先放到网上给大家免费下载和阅览。

下载链接地址为:
http://download.csdn.net/download/chenshuzhenteacher/4807846

进入我的博客的方法是,在CSDN博客里的输入框里输入:chenshuzhenteacher即可,   然后点击资源即可,您试验一下,有问题请告诉我。

CSDN里的下载里(有个放大镜)的输入框里输入:C++语言释难解惑也可以。

我向您证,我和陈翼男博士合写的这本书是一本很有意义的一本书,绝非欺世盗名之作。如果您看懂了,请您在网上发点感言,就是对我们的最大回报。谢谢。

 

目录

 

1            C++语言的基础知识...7

1.1            什么是抽象...7

1.2            面向对象开放方法为什么优于传统的开发方法?...7

1.3            C++函数声明只能为原型形式,目的是为了函数重载...7

1.4            C++编译器与C语言编译器的关系...8

1.5            C++为什么不提倡使用scanfprintf函数...9

1.6            以自内向外的规则读一个定义语句...9

1.7            const修饰符最重要的用途是函数传参和类继承...10

1.8            C++支持缺省参数值并非仅仅为了函数调用灵活...11

1.9            应用程序与内存的关系...11

1.10         newdeletemallocfree的对比...11

1.11          使用newdelete要注意什么...12

1.12         堆数组的优越性...12

1.13         内联机制的得与失...13

1.14         内联函数的实质...13

1.15         编译器与变量的逻辑地址...14

1.16         引用与变量的逻辑地址...14

1.17         关于C++引用机制内在实现的深层探索...14

1.18         理解刁钻定义语句的方法:自内向外读...19

1.19         怎样解读定义引用的语句...20

1.20         ‘&’是引用运算符吗?被引用变量类型可任意吗?...20

1.21         引用的主要用途...21

1.22         const引用的用途...22

1.23         在定义指向函数的指针上,C++C语言不同...23

2            类和对象...25

2.1            类声明部分与类实现部分的作用域问题...25

2.2            符号‘::’有时候不是运算符...25

2.3            对象的数据和函数在内存里放在一起吗?...25

2.4            C++的类与C++的结构之对比...26

2.5            C++编译器利用this实现成员函数共享的细节...26

2.6            消息三要素...29

2.7            函数重载机制的奥秘...29

2.8            函数重载与参数缺省值共用可能引起两意性...31

2.9            函数重载与引用传参共用可能引起两意性...31

2.10         类作用域及类成员作用域的延伸...32

2.11          值得推荐的嵌套类...33

3            构造函数和析构函数...35

3.1            C++为什么要有构造函数和析构函数...35

3.2            生成对象时可能发生的两意性问题...36

3.3            类的指针成员与缺省构造函数问题...36

3.4            析构函数与符号‘~’37

3.5            调用复制构造函数的充分必要条件...37

3.6            C++很少使用值传参的主要原因...37

3.7            C++为什么要提供数据类型转换...37

3.8            构造函数与隐式类型转换...37

3.9            构造函数与显式类型转换...38

3.10         C++为什么允许数据类型转换写成形如int(3.14)39

3.11          构造函数和析构函数可以是私有或保护的吗?...40

3.12         等号形式的对象初始化...41

3.13         函数返值与对象初始化细节...42

3.14         当函数返值是引用时的一系列问题...44

3.15         返值是引用的函数调用表达式为什么可以作左值...46

3.16         当类成员被const时为什么必须使用初始化表...47

3.17         当类成员是引用时为什么构造函数形参必须是引用...47

4            继承和派生类...51

4.1            公有派生和赋值兼容规则与异质链表...51

4.2            私有派生下,基类不可访问成员无法访问吗?...52

4.3            私有派生与保护派生关于基类成员可访问性之对比...52

4.4            虚基类子对象在派生类对象中的存储之谜...53

5            多态性和虚函数...55

5.1            现实生活版本的多态性...55

5.2            多态性第一大用途:使异质链表智能化...55

5.3            多态性实现靠的是幕后英雄:编译器...55

5.4            静态联编的实现细节...56

5.5            派生类与基类中的同名函数为什么称为重载?...56

5.6            为什么说编译时多态性价值不大?...56

5.7            用指针将异质结点穿起来的条件...58

5.8            揭开虚函数的神秘面纱...60

5.9            细微到虚指针和虚表级别的执行过程之谜...63

5.10         深入理解动态联编、虚函数机制、多态性三概念...65

5.11          多姿多态美如礼花的多态性例子...66

5.12         虚函数机制最重要的目的是虚以待实-‘换肾’...68

5.13         虚析构函数与虚函数相伴而生潜规则之谜...73

5.14         编译器如何对动态联编语句中虚函数访问权限检查...76

5.15         构造函数和析构函数调虚函数为什么静态联编?...77

6            特殊成员及友元...81

6.1            C语言为什么要设立内部静态存储类型?...81

6.2            C++为什么要设立类静态数据成员?...81

6.3            类静态数据成员的外部属性...82

6.4            C++为什么要设立类静态成员函数?...83

6.5            类静态成员函数的外部属性...83

6.6            基类的静态数据成员是否为整个类家族对象共享?...83

6.7            静态成员函数的两面性...84

6.8            友元函数的声明只能放在类的公有部分吗?...84

6.9            友元的提出是为了方便程序的读写吗?...84

6.10         将另一个类的成员函数声明为类的友元函数的比喻...85

6.11          定义另一个类的成员函数为本类友元函数的格式...85

6.12         将另一个类声明为类的友元类的形象例子...86

6.13         只与单个类有关的友元改为类静态成员函数更好...90

6.14         constthis成员函数的由来...91

6.15         为何const对象只能与constthis成员函数连用?...93

6.16         constthis和非constthis是两个不同的成员函数...93

6.17         constthis成员函数的声明与定义的一致性...94

6.18         const对象可以与constthis成员函数连用...95

6.19         关于const函数返值的探讨...96

6.20         C++为什么有类型转换问题?...99

6.21         C++隐式自动转换的方向问题...99

6.22         ‘由外向里的转换’和‘由里向外的转换’...100

6.23         深入理解指针的两个属性...100

6.24         一种小范围指针:指向类数据成员的指针...101

6.25         指向类数据成员的指针的定义和读法...101

6.26         运算符 .*.102

6.27         运算符->*.103

6.28         指向类成员函数的指针...105

6.29         指向类成员函数的指针与虚函数...107

6.30         指向类静态成员的指针...108

7            运算符重载及流类库...111

7.1            运算符的一符多用现象...111

7.2            在哪种情况下使用哪种重载运算符的方式合适?...111

7.3            前缀++类运算符重载函数的返值类型问题...112

7.4            前缀++类运算符重载函数的返值是类名的讨论...112

7.5            前缀++类运算符重载函数的返值是voidint114

7.6            前缀++类运算符重载函数的返值是类名的引用...115

7.7            后缀++类运算符重载函数的返值类型问题...115

7.8            后缀++运算符的重复运算问题...116

7.9            关于++--运算符正确使用的讨论...116

7.10         负号类运算符重载函数的返值类型问题...117

7.11          关于友元运算符重载函数的返值类型问题...119

7.12         关于赋值运算符重载函数返值类型的讨论...121

7.13         流类库的产生...122

7.14         揭开流的神秘面纱...123

7.15         缓冲区的用途...123

7.16         最基本的流类继承关系图的解释...123

7.17         自定义类对象‘>>’和‘<<’的连续性问题...124

7.18         重载‘<<’函数的参数是否为引用的问题...125

7.19         重载‘>>’函数的参数是否为引用的问题...126

7.20         用于格式化I/O的数据成员...126

7.21         对格式标志字的深刻理解...127

7.22         接口函数setf(long_setbits, long _field)的解释...129

7.23         C++为什么要提供操作子...129

7.24         endl居然是外部函数!...130

7.25         我们看重流对象什么?...130

7.26         文件流类...131

7.27         文件读写函数readwrite形参中char*的解释...131

7.28         C++语言中文本文件与换行符的关系...132

7.29         C++语言读取文本文件的一个方法...139

8            预处理命令和编译器...143

8.1            如何避免头文件被重复包含?...143

8.2            有了constinline,宏定义就‘光荣退休了’?...143

8.3            visualC++6.0的一些错误和缺陷的探讨...146

8.4            turboc++3.0编译器的一个错误...149

9            编程实例...153

9.1            超市管理程序...153

9.2            学校管理程序...160

10         典型题与深究题详解...185

10.1         典型题:函数名重载...185

10.2         典型题:指针的引用...186

10.3         深究题:cin抽取的细节...186

10.4         深究题:仅指向首元素的指针与this指针...187

10.5         典型题:小错集锦...190

10.6         典型题:指针成员与构造函数...191

10.7         典型题:指针成员与析造函数...192

10.8         深究题:拷贝构造函数之调用时机...192

10.9         典型题:私有成员与公有继承...194

10.10       典型题:多继承与二意性...196

10.11       深究题:基类中的私有数据与初始化表...197

10.12       典型题:初始化表...198

10.13       典型题:派生类对象所含各成分初始化过程...199

10.14       典型题:派生类对象的构造函数匹配问题...203

10.15       典型题:动态联编与虚函数...206

10.16       深究题:指向基类的指针与虚析构函数...207

10.17       典型题:动态联编与虚函数...209

10.18       深究题:引用传参与动态联编和虚函数...210

10.19       典型题:引用传参与动态联编...212

10.20       典型题:形参的数据类型与动态联编...214

10.21       典型题:多继承与动态联编...215

10.22       典型题:非类成员与访问权限属性...217

10.23       深究题:静态成员函数调用非静态成员函数...217

10.24       典型题:静态数据成员的初始化...219

10.25       典型题:类的定义与声明...220

10.26       典型题:友元函数...220

10.27       典型题:静态与友元...222

10.28       典型题:constthis成员函数与const对象...223

10.29       典型题:静态数据成员与静态成员函数...225

10.30       典型题:静态数据成员与静态成员函数...227

10.31       典型题:静态数据成员与静态成员函数...230

10.32       典型题:友元重载运算符与运算级别...232

10.33       典型题:cincout233

10.34       典型题:友元重载运算符函数的参数...233

10.35       深究题:重载运算符[]234

10.36       典型题:起到操作子作用的对象...237

10.37       典型题:操作子setw..239

10.38       典型题:函数模板...239

10.39       典型题:函数模板...241

10.40       典型题:类模板...242

10.41       典型题:类模板...243

10.42       深究题:函数模板与二维数组...245

10.43       典型题:类模板...247

10.44       深究题:函数模板与冒泡排序法...248

附录1     ASCII码表...251

附录2     CC++的图示教学法...253

附录3     vc++6.0使用方法简单介绍...259

第一课 建立工程和加入源文件...259

第二课 工程的编译和连接...267

第三课 调试程序基本功...271

第四课 菜单功能简介...277

参考书目...280

 

----------------------------------------------作者声明-----------------------------------------

我是一个老头,65岁,编过10年程序,在大学教过15年书,写了一本书,名为《C++释难解惑》,这几年来一直在投稿。出版社对我的书稿评价很好,但他们就是由于经济上的风险。总是在出版的最后关头反悔。其中北京****出版社已经签字画押的情况下反悔;北京****出版社与我签过电子合同;书稿在**大学出版社放了9个月,还让我请名人写序言,最后说现在书很难卖,并且还给我发了个近半年的图书销售的excel文档让我看,希望我理解出版社。我只好仰天嗟叹了。

有编辑朋友建议我把书稿放到网上让读者试读,以印证读者的人数和满意度。我想这是一个办法,即使永远不能出版,也不至于烂在肚子里。并且我在网上也看到这个办法成功的先例,例如《C语言深度解剖》,后来就由北航出版社出版了。

如果您对我的书稿和博文感兴趣,请您推荐给您的朋友,谢谢。

本书稿已经国家版权保护中心进行了作品登记,登记号为:2010-A-023237

下面我把一些出版社给我的来信摘录作为参考。您可以看到,我的书名在不同的出版社和编辑面前改了好几次名了,现在书稿的名字是我自己的。

//-----------------------------------以下是**大学出版社编辑的来信---------

陈老师,

   选题我暂以《C++释疑解惑:课本没讲透的131个问题》的名字报上去了。通过审批应该问题不大。下面几点,是咱们电话里说过的,麻烦你着手进行啊:)

 

//-----------------------------------------------------------------------------------------------------------

陈老师好

从您的来信,我觉得您的文字驾驭能力挺好的,如果您的书,能写成您给我来信的风格,也不错,现在市场上还就缺这样的书。那种一步步讲操作,枯燥的原理,确实没人愿意看,而那种语言比较生动,穿插一些开发故事,体会心得之类的文风,让冰冷的技术活了起来,容易引起读者的共鸣。所以,建议书至少300页,写得生动些,多配些图,甚至每章最后都可以增加上一些问答,比如您历年教学收集到的经典问题等等。当然,其他的一些方法,也都可以尝试,我这里只是抛砖引玉。

 

//----------------------------------------------------------------------------------------------------------

尊敬的陈老师:您好!

由于负责这本书的编辑已经离职,这本书现由我负责与您沟通及出版事宜。

这本稿件从市场上鲜有的写作角度出发,揭示了C++的很多难点,有些内容具有一定的深度,同时又力求在写作上深入浅出,会有一定量的读者关注书中的问题,这是本书的一大特色

//-------------------------------------------------------

 

陈老师:您好!

 今天,就这部书稿又与领导进行了沟通。从这部书稿可看出,其中积淀了您多年的经验和大量心血,力图为读者学习C++排疑解惑,实属难能可贵。

 从现在的销售数据(开卷数据:专门的图书销售调查数据,采集自全国2000多家书店,随邮附上)看,目前市场上同类书整体销量不理想(月销200本以上较好),即便在这样的数据面前,相对好销的书还属于基础入门的书或教材。在此,也冒昧地想和您探讨,如何将此书出销好的办法,比如:您能帮助出版社做哪些宣传推广,或者利用院校资源推广销售,以及在零售书店怎样做宣传,才能让读者广泛知晓本书并认可,从而形成销售。

 

 

//------------------------------------------------------------------------------------------

 

陈老师:您好!

 

    从来信看到您对开卷销售数据进行了详细分析,相信您也看出零售图书市场的销售状况,即便是第1名的图书也不过160/月,假设书店与网店销量平分秋色,每月的总销量也只有320本,一年的销量为3840册,按计算机书的平均销售周期一年半计算,预计为5760册(纯零售不包括教材)。以此推算,当月销量在100本的书,预计3600册。这个销量如果没有教材的销量支撑,从出版社的成本计算基本上是没有什么利润的,如果计算上在途、退货等因素,稍有不慎恐怕就会亏本,这基本上就是纯零售书的状况。

 

    信中提到的几位作者的书,销量多则50多本,少则几本,如果纯靠零售销售的话,简单可以看出最终销量的情况。

 

    社里对您这本书的含金量一直都是肯定的,只是苦于店销图书的销售状况,也深知您的身体状况在写作上将要付出的巨大努力,觉得再让您改稿实在是有些不合适。

 

 

//-------------------**大学出版社电子出版物编辑的来信--------------------------

陈老师您好:

    我与图书编辑沟通了,就如您告诉我的,他对本书的质量不持疑义,主要考虑的是本书的经济效益。我们作为电子出版和网络出版部门,还没出过单独的网络出版物,这条路暂时不考虑。电子出版物5000左右的成本,包括生产成本和人力成本,要保证持平的话,恐怕要由作者承担。这是我向领导报选题时的一项。您作为作者,据我理解,如果没有相关经费支持,由您个人承担是有问题的。所以这个选题的前景还要您考虑。

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

参考书目

1.   []TedFaisonBorland C++3.1编程指南,蒋维杜等译,清华大学出版社,1993

2.   侯俊杰,深入浅出MFC,华中科技大学出版社,2001

3.   []JessLiberty21天学通C++,人民邮电出版社,2002

4.   [] StanleyB. Lippman,深度探索C++对象模型,侯捷译,华中科技大学出版社,第12007 

5.   张海藩等,软件工程,人民邮电出版社2010

6.   宛延闿,C++语言和面向对象程序设计,第二版,清华大学出版社1997

7.   网上下载的全国高自考上机考试题目

8.   陈树振、陈翼男,C++文本文件的一种读写方法,《电脑开发与应用》2008年第10期,中国北方自动控制研究所

9.   陈树振,CC++的图示教学法,《教学研究》,200510月,北京科技职业学院

10.             [] Peter Van Der Linden C专家编程,徐波译,人民邮电出版社,2002,12

 

 

 

原创粉丝点击