`
tjmzgn
  • 浏览: 155883 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C++/C编程指南-- 第5章 常量

    博客分类:
  • C++
阅读更多
第5章 常量
   
    常量是一种标识符,它的值在运行期间恒定不变。C语言用 #define来定义常量(称为宏常量)。C++ 语言除了 #define外还可以用const来定义常量(称为const常量)。

    5.1 为什么需要常量
   
    如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?

    (1) 程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。

    (2) 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。

    (3) 如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。


    l 【规则5-1-1】 尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。

    例如:

    #define MAX 100 /* C语言的宏常量 */

    const int MAX = 100; // C++ 语言的const常量

    const float PI = 3.14159; // C++ 语言的const常量

    5.2 const 与 #define的比较
    C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:

    (1) const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。

    (2) 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。


    l 【规则5-2-1】在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。

    5.3 常量定义规则
    l 【规则5-3-1】需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。

    l 【规则5-3-2】如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。

    例如:

    const float RADIUS = 100;

    const float DIAMETER = RADIUS * 2;

    5.4 类中的常量
    有时我们希望某些常量只在类中有效。由于#define定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用const修饰数据成员来实现。const数据成员的确是存在的,但其含义却不是我们所期望的。const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。

    不能在类声明中初始化const数据成员。以下用法是错误的,因为类的对象未被创建时,编译器不知道SIZE的值是什么。

    class A

    {…

    const int SIZE = 100; // 错误,企图在类声明中初始化const数据成员

    int array[SIZE]; // 错误,未知的SIZE

    };


    const数据成员的初始化只能在类构造函数的初始化表中进行,例如

    class A

    {…

    A(int size); // 构造函数

    const int SIZE ;

    };

    A::A(int size) : SIZE(size) // 构造函数的初始化表

    {

    …

    }

    A a(100); // 对象 a 的SIZE值为100

    A b(200); // 对象 b 的SIZE值为200


    怎样才能建立在整个类中都恒定的常量呢?别指望const数据成员了,应该用类中的枚举常量来实现。例如

    class A

    {…

    enum { SIZE1 = 100, SIZE2 = 200}; // 枚举常量

    int array1[SIZE1];

    int array2[SIZE2];

    };

    枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如PI=3.14159)。

分享到:
评论

相关推荐

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

    第1章 文件结构<br/>第2章 程序的版式<br/>第3章 命名规则<br/>第4章 表达式和基本语句<br/>第5章 常量<br/>第6章 函数设计<br/>第7章 内存管理<br/>第8章 C++函数的高级特性<br/>第9章 类的构造函数、析构函数与...

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

    第5章 常量 27 5.1 为什么需要常量 27 5.2 CONST 与 #DEFINE的比较 27 5.3 常量定义规则 27 5.4 类中的常量 28 第6章 函数设计 30 6.1 参数的规则 30 6.2 返回值的规则 31 6.3 函数内部实现的规则 33 6.4 其它建议 ...

    高质量C/C++编程指南(PDF)

    第5 章 常量 5.1 为什么需要常量. 5.2 CONST 与 #DEFINE 的比较. 5.3 常量定义规则. 5.4 类中的常量. 第6 章 函数设计 高质量C++/C 编程指南,v 1.0 2001 Page 4 of 101 6.1 参数的规则. 6.2 返回值的规则. 6.3 ...

    高质量c++编程指南 第三版

    本书论述高质量软件开发方法与C++/C编程规范共十五章,分两部分: 第一部分共四章,重点介绍软件质量和面向对象程序设计方法。 第二部分共十一章,重点阐述C++/C编程风格和一些技术专题。 本书以幽默的笔调对软件...

    高质量C++编程指南.PDF

    高质量C/C++编程指南.PDF 作者:林锐 目录: 前 言 第1章 文件结构 1.1 版权和版本的声明 1.2 头文件的结构 1.3 定义文件的结构 1.4 头文件的作用 1.5 目录结构 第2章 程序的版式 2.1 空行 2.2 代码行 2.3 代码行内...

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

    第1 章 文件结构;...第5 章 常量; 第6 章 函数设计; 第7 章 内存管理; 第8 章 C++函数的高级特性; 第9 章 类的构造函数、析构函数与赋值函数; 第10 章 类的继承与组合; 第11 章 其它编程经验;

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

    帮助我们写出漂亮、规范的代码 ...第5 章 常量 第6 章 函数设计 第7 章 内存管理 第8 章 C++函数的高级特性 第9 章 类的构造函数、析构函数与赋值函数 第10 章 类的继承与组合 第11 章 其它编程经验

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

    第5章 常量... 33 5.1 为什么需要常量... 33 5.2 const 与 #define的比较... 33 5.3 常量定义规则... 33 5.4 类中的常量... 34 第6章 函数设计... 36 6.1 参数的规则... 36 6.2 返回值的规则... 37 6.3 函数内部实现...

    高质量C++/C 编程指南 (林锐版)

    第5 章 常量............................................................................................................................8 5.1 为什么需要常量.............................................

    C语言高级程序员编程指南

    第五章 键盘操作 第六章 数学 第七章 文件、目录和磁盘 第八章 数组、指针和结构 第九章 DOS和BIOS服务 第十章 内存管理 第十一章 日期和时间 第十二章 重定向I/O和进程命令行 第十三章 编程工具 ...

    高质量C++C编程指南(非扫描高清版)(林锐博士)

    第5 章 常量 5.1 为什么需要常量. 5.2 CONST 与 #DEFINE 的比较. 5.3 常量定义规则. 5.4 类中的常量. 第6 章 函数设计 高质量C++/C 编程指南,v 1.0 2001 Page 4 of 101 6.1 参数的规则. 6.2 返回值的规则....

    高质量C++_C编程指南

    高质量C++_C编程指南 应该算是一本不错的书 目 录 前 言 6 第1章 文件结构 11 1.1 版权和版本的声明 11 1.2 头文件的结构 12 1.3 定义文件的结构 13 1.4 头文件的作用 13 1.5 目录结构 14 第2章 程序的版式 15 2.1 ...

    高质量C/C++编程指南.pdf

    《高质量C/C++编程指南》,作者:林锐,pdf 格式,大小 327KB。 目录: 前 言 ..................................................................................................................................

    《高质量程序设计指南》林锐.rar

    第五章 文件结构 第六章 程序的版式 第七章 命名规则 第八章 表达式与基本语句 第九章 常量 第十章 函数设计 第十一章 内存管理 第十二章 C++函数的高级特性 第十三章 类的构造函数、析构函数与赋值函数 第十四章 ...

    高质量C++C编程指南.PDF

    第 1 章 文件结构 第 2 章 程序的版式 ...第 5 章 常量 第 6 章 函数设计 第 7 章 内存管理 第 8 章 C++函数的高级特性 第 9 章 类的构造函数、析构函数与赋值函数 第 10 章 类的继承与组合. 第 11 章 其它编程经验

Global site tag (gtag.js) - Google Analytics