C++ FAQS 翻译2 (第一部分 预备知识 第一章 介绍)

第一部分 预备知识
第一章 介绍

问题1.6 这些FAQS的回答有怎样的指导意义?
答:意义有:解释语言的特性、对如何恰当的使用特性给出指导、通过实例程序讨论问题。

这些FAQS按照上面的叙述,指导意义大致可以分为以下三类:

(1) FAQS的回答,解释了某项C++的语言特性,并说明在C++程序中如何正确的使用它们。

(2) FAQS的回答,说明了怎样恰当的使用某些C++特性。在这样的回答中,有时针对单一的语言特性展开论述,有时结合多个语言特性进行说明。组合多个特性进行说明,使它们易于进行为满足多种技术和业务要求所进行的复杂设计。

(3) FAQS的回答,揭露出实际编程中的蹩脚问题。这些问题是导致开发者开发出隐藏错误、难于理解、不易扩展、维护成本高、缺乏复用性软件的根源,还会介绍什么才是设计和编程正确法则。

 

问题1.7 什么是FAQS的电子版?既然FAQS的电子版是免费的,为什么还要买本书呢?
答:电子版的FAQS最初是由Marshall Cline搜集整理并发布到互联网上的,包含一系列的关于C++的问题和解答。现在,最新的FAQS的电子版仍由Marshall更新和发布,大家可以到新闻组comp.lang.c++下载它。随着问题的深入和积累,Addison-Wesley出版社最终打算以书的形式来出版它。

本书比电子版的FAQS阐述了更多的主题、探讨的更加深入。本书为了更为深入的说明关键部分,提供了许多新的例子程序。

大部分的例子程序是可以运行的、独立的、有自己的main()函数以及必须的#include文件等等。本书所有的例子程序多可以直接编译和运行。

 

 

问题1.8 为什么你已经有了本书的第一版,还需要买本书的第二版?

: 呵呵,因为技术是在变化的,而你又想跟上它的步伐。

近几年,面向对象技术和C++语言都发生了显著的变化。产生了新的语言结构,比如运行时期类型识别(RTTI)和命名空间(namespace)。标准模板库(STL)已经成为学习C++必须的知识。统一建模语言(UML)极大的促进了面向对象设计符号的标准化。对于每一位C++的开发者来说,JavaCorbaActiveX都是需要了解的新热点知识。本书第二版的目的是,遵循本书第一版那种已经被接受的组织形式和简练风格,向读者叙述这些新的概念和技术。

最后,本书的第二版比第一版的在讲述的语法内容方面更加完整,我们感谢大量读者提出的宝贵建议,并尽量在各个地方完善本书。

 

问题1.9 本书的术语和约定有哪些?

答:未加说明的单词inheritance表示“public inheritance(公有继承)”,private(私有的)或protected(保护的)继承会明确的说明。

类似的,未加说明的术语derived class表示“public derived class(公有派生类)”,通过关键的派生类分别表示"private derived class" (私有派生类)和"protected derived class"(保护派生类)。

BaseDerived用作假定的类名称,用来代表继承关系中的基类和它的(公有)派生类。

out-lined(外联)函数说明函数必须通过CALL指示符进行调用。相反,当调用一个inlined(内联)函数时,编译器会将该函数的目标码插入到它调用点处。

    remote ownership用在当一个对象包含了一个负责删除它自身的指针时。当对象具有remote ownership特性时,默认的析构和拷贝是不正确的,因此需要使用explicit来处理。

    读者可以修改本书中使用的简化描述方法,例如,我们使用“using namespace std;”声明对标准库的使用,这种一次性引入整个标准库的方法对于使用者来说是很方便的,但是这种做法还是遭到了很多人的非议。大多数作者建议使用std::标示符的方式,引用必要的类型及名称。

    OO"object-oriented."的缩写。

    method就是类的成员函数(member function)的意思。

    相比较使用0,使用NULL更能提高代码的可读性。读者进行练习之前应该考虑代码规范。

    C程序设计语言代表ISO版本的C语言。

    main()函数结束的时候,编译器会增加一个默认的返回值为0

    bool型数据属于内置数据类型,包含truefalse两种值。即如你的编译器很不幸没有内置bool类型,将下面这段定义加在每段例子开头处:

                    typedef char bool;

        const bool false = 0;

        const bool true = 1;

   表达式 new MyClass,表示动态创建某种类型MyClass的对象,假设内存耗尽则会抛出异常,而不是返回NULL。除了个别编译器之外,大部分编译器都是这样实现的。

    本书中的大多数例子使用的是protected数据成员,而不是private数据成员。实际上,对大多数的开发者和应用来说这是合乎情理的。但是,框架程序的开发者大概需要少用protected数据成员,因为protected数据成员会增加派生类和基类之间的数据耦合的机会。总之,框架程序开发者应该使用private数据成员,protected成员函数。

    classes, structs, unions, enumstypedefs的名称以一个大写字母开头,预处理符全是大写字母,所有其他的标示符均以小写字母开头。数据成员名和类内的枚举变量名均以下横线结尾。

    默认的C++文件扩展名是.cpp.hpp,一些别的编译器有自己习惯的扩展名。

    使用UML(统一建模语言)符号用来表达设计中的关联关系。

    在挑选例子的时候考虑了以下的因素:(1)单一的目的。(2)尽量的简洁。(3)具有完整的功能。也就是说,每一个例子都会论述一个知识点或者技术点、尽可能的短小、而且它是完整的、可运行的程序。但是这些例子不能直接应用于实际的工作当中,因为为了尽量的满足这些因素,降低了程序的可复用性。

    为了避免在寻找使用virtualinline成员函数的最佳平衡时,所带来的复杂讨论,virtual成员函数时常在没有必要的时候使用(见问题21.15)。为了达到简洁的效果,许多成员函数都直接定义在了类的声明体中,甚至没有使用inline标示符来标示这些成员函数,并把它们放在类的声明体之后(见问题6.05)。不调用的函数通常也不会定义它,某些函数即使被调用也可能是未定义的,因为针对我们的原则简洁的例子比完整的例子更为重要。同样为了件程序的简洁,例子程序不提供预处理器,同时也就没有扩展性(见问题2.16)。

例子程序通常把public部分放在类声明体的开头处,而不是放在其他的位置。这样做的好处是便于那些使用类的人方面的阅读类所提供的方法,但是对于那些修改类的的人来说,这种做法并不一定很好。通常使用类的人总是比修改它的人要多,这种做法考虑了这个因素才。

    本书将假定你的C++编译器和标准库是符合标准的、并能正常工作的。但实际上,它们并没有假设的那么安全,你要加倍小心。:)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值